多執行緒的那點兒事14(之無鎖佇列)

2022-03-24 23:29:28 字數 748 閱讀 4239

對於編寫多執行緒的朋友來說,佇列具有天生的互斥性。在佇列裡面,乙個負責新增資料,乙個負責處理資料。誰也不妨礙誰,誰也離不開誰。所以,佇列具有天生的並行性。

[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 ...