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

2021-06-02 06:59:13 字數 1113 閱讀 5098

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

生產者的演算法,

waitforsingleobject(hempty, infinite);

waitforsingleobject(hmutex, inifinite);

/* produce new resources */

releasemutex(hmutex);

releasesemaphore(hfull, 1, null);

消費者的演算法,

waitforsingleobject(hfull, infinite);

waitforsingleobject(hmutex, inifinite);

/* consume old resources */

releasemutex(hmutex);

releasesemaphore(hempty, 1, null);

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

typedef struct _message_queue

message_queue;

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

void send_mseesge(int threadid, message_queue* pqueue, int msg)

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

void get_message(message_queue* pqueue, int* msg)

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

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

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

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

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

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

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

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

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