多執行緒的那點兒事(之生產者 消費者)

2021-08-14 10:03:52 字數 1358 閱讀 7060

生產者-消費者是很有意思的一種演算法。它的存在主要是兩個目的,第一就是滿足生產者對資源的不斷創造;第二就是滿足消費者對資源的不斷索取。當然,因為空間是有限的,所以資源既不能無限儲存,也不能無限索取。

生產者的演算法,

[cpp]view plain

copy

waitforsingleobject(hempty, infinite);  

waitforsingleobject(hmutex, inifinite);  

/* produce new resources */

releasemutex(hmutex);  

releasesemaphore(hfull, 1, null);  

消費者的演算法,

[cpp]view plain

copy

waitforsingleobject(hfull, infinite);  

waitforsingleobject(hmutex, inifinite);  

/* consume old resources */

releasemutex(hmutex);  

releasesemaphore(hempty, 1, null);  

那麼,有的朋友可能會說了,這麼乙個生產者-消費者演算法有什麼作用呢。我們可以看看它在多執行緒通訊方面是怎麼發揮作用的?首先我們定義乙個資料結構,

[cpp]view plain

copy

typedef

struct

_message_queue  

message_queue;  

那麼,此時如果我們需要對乙個執行緒傳送訊息,該怎麼傳送呢,其實很簡單。我們完全可以把它看成是乙個生產者的操作。

[cpp]view plain

copy

void

send_mseesge(

intthreadid, message_queue* pqueue, 

intmsg)    

既然前面說到發訊息,那麼執行緒自身就要對這些訊息進行處理了。

[cpp]view plain

copy

void

get_message(message_queue* pqueue, 

int* msg)    

總結:(1)生產者-消費者只能使用semphore作為鎖

(2)編寫**的時候需要判斷hfull和hempty的次序

(3)掌握生產者-消費者的基本演算法很重要,但更重要的是自己的實踐

多執行緒的那點兒事(之生產者 消費者)

生產者 消費者是很有意思的一種演算法。它的存在主要是兩個目的,第一就是滿足生產者對資源的不斷創造 第二就是滿足消費者對資源的不斷索取。當然,因為空間是有限的,所以資源既不能無限儲存,也不能無限索取。生產者的演算法,waitforsingleobject hempty,infinite waitfor...

多執行緒的那點兒事(之生產者 消費者)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!生產者 消費者是很有意思的一種演算法。它的存在主要是兩個目的,第一就是滿足生產者對資源的不斷創造 第二就是滿足消費者對資源的不斷索取。當然,因為空間是有限的,所以資源既不能無限儲存,也不能無限索取。生產者的演算法,waitforsingleobje...

多執行緒的那點兒事11(之生產者 消費者)

生產者的演算法,cpp view plain copy waitforsingleobject hempty,infinite waitforsingleobject hmutex,inifinite produce new resources releasemutex hmutex release...