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

2021-08-31 20:22:01 字數 1283 閱讀 7503

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

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

生產者的演算法,

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_queuemessage_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)掌握生產者-消費者的基本演算法很重要,但更重要的是自己的實踐

給我老師的人工智慧教程打call!

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

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

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

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

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

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