對於編寫多執行緒的朋友來說,佇列具有天生的互斥性。在佇列裡面,乙個負責新增資料,乙個負責處理資料。誰也不妨礙誰,誰也離不開誰。所以,佇列具有天生的並行性。
[cpp]view plain
copy
#define max_number 1000l
#define status int
#define ok 0
#define false -1
typedef
struct
_queue_data
queue_data;
此時,乙個執行緒壓入資料,操作為push_data,
[cpp]view plain
copy
status push_data(queue_data* pqueue,
intdata)
那麼,還有乙個執行緒就負責處理資料pop_data,
[cpp]view plain
copy
status pop_data(queue_data* pqueue,
int* pdata)
總結:
(1)佇列只適合兩個執行緒並行使用,乙個壓入資料,乙個彈出資料
(2)佇列是沒有鎖的並行,沒有死鎖的危險
(3)佇列中head和tail只有在計算結束之前的時候才能進行自增運算
多執行緒的那點兒事(之無鎖佇列)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!對於編寫多執行緒的朋友來說,佇列具有天生的互斥性。在佇列裡面,乙個負責新增資料,乙個負責處理資料。誰也不妨礙誰,誰也離不開誰。所以,佇列具有天生的並行性。define max number 1000l define status int defin...
多執行緒的那點兒事16(之無鎖鏈表)
前面,為了使得寫操作快速進行,我們定義了順序鎖。但是順序鎖有個缺點,那就是處理的資料不能是指標,否則可能會導致exception。那麼有沒有辦法使得處理的資料報括指標呢?當然要是這個鍊錶沒有鎖,那就更好了。針對這種無鎖鏈表,我們可以初步分析一下,應該怎麼設計呢?1 讀操作沒有鎖,那麼怎麼判斷讀操作正...
多執行緒的那點兒事(之讀寫鎖)
在編寫多執行緒的時候,有一種情況是十分常見的。那就是,有些公共資料修改的機會比較少。相比較改寫,它們讀的機會反而高的多。通常而言,在讀的過程中,往往伴隨著查詢的操作,中間耗時很長。給這種 段加鎖,會極大地降低我們程式的效率。那麼有沒有一種方法,可以專門處理這種多讀少寫的情況呢?有,那就是讀寫鎖。1 ...