生產者消費者是乙個經典的模式
利用生產者,消費者和緩衝區降低了生產者和消費者之間的的耦合度
便於對生產者和消費者的修改
下面記錄的是乙個經典的單一生產者多消費者的模式
以佇列做為緩衝區,實現產品的fifo
生產者呼叫緩衝區的push函式,將產品加入緩衝區
消費者呼叫緩衝區的pop函式,將產品從緩衝區取出
因為生產者與消費者分屬於不同的執行緒,所以要設定鎖
class cachequeue
;
重要的函式是push和pop,生產者呼叫push向緩衝區新增產品,消費者則呼叫pop函式獲取產品
執行緒條件_not_full_cond表示佇列不滿,可以新增產品
執行緒條件_not_empty_cond表示佇列不空,可以獲取產品
void cachequeue::push(int req)
_requests->push(req);
/*** 傳送非空訊號
*/ pthread_cond_signal(&_not_empty_cond);
/*** 解鎖
*/ pthread_mutex_unlock(&_mutex);
}
int cachequeue::pop(uint32_t timeout)
/*** 沒有資料,返回沒有資料標識
*/ if(ret!=0)
/*** 返回資料,傳送佇列非滿訊號
*/ req = _requests->front();
_requests->pop();
pthread_cond_signal(&_not_full_cond);
/*** 解鎖
*/ pthread_mutex_unlock(&_mutex);
return req;
}
linux下c 實現簡單的生產者消費者佇列模式
生產者消費者是乙個經典的模式 利用生產者,消費者和緩衝區降低了生產者和消費者之間的的耦合度 便於對生產者和消費者的修改 下面記錄的是乙個經典的單一生產者多消費者的模式 以佇列做為緩衝區,實現產品的fifo 生產者呼叫緩衝區的push函式,將產品加入緩衝區 消費者呼叫緩衝區的pop函式,將產品從緩衝區...
生產者 消費者問題實現 linux下C語言
作業系統的乙個經典問題是 生產者 消費者 問題,這涉及同步訊號量和互斥訊號量的應用,在這裡,我用執行緒的同步和互斥來實現.author 張文 2008 06 20 include include include include include define n 2 消費者或者生產者的數目 defin...
c實現生產者消費者問題。 windows下。
include include define p s waitforsingleobject s,infinite 定義windows下的p操作 define v s releasesemaphore s,1,null 定義windows下的v操作 生產者 消費者 緩衝區 define num of...