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