linux下c 實現簡單的生產者消費者佇列模式

2021-06-21 16:02:15 字數 997 閱讀 2107

生產者消費者是乙個經典的模式

利用生產者,消費者和緩衝區降低了生產者和消費者之間的的耦合度

便於對生產者和消費者的修改

下面記錄的是乙個經典的單一生產者多消費者的模式

以佇列做為緩衝區,實現產品的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...