生產消費者模型,主要考驗的就是對互斥這部分的理解,下面就用了簡單的例子來談一談經典的生產消費者模型。
sem_init()
;// 初始化訊號量
sem_wait()
;// 訊號量減一
sem_post()
;// 訊號量加一
生產者每隔一段時間生產乙個產品入庫
消費者每隔一段時間消費乙個產品出庫
兩者的工作時間不同
思路: 生產者生產物品時,生產訊號量減一
生產過程加一
生產完成後,消費訊號量加一
消費者消費時,消費訊號減一
消費過程減一
消費完成後,生產訊號加一
出庫入庫的時候保證時互斥的。
#include
#include
#include
#include
#include
#include
#define msleep(x) usleep(x * 1000)
// 延時
#define product_speed 200
// 生產速度
#define cousum_speed 400
// 消費速度
#define init_num 3
// 倉庫初始庫存
#define total_num 10
// 倉庫總庫存
struct handle ;
/* 生產延時 */
void
productdelay
(void
)/* 消費延時延時 */
void
consumerdelay
(void
)/* 消費出庫 */
void
sub_to_work
(struct handle *handle)
/* 生產入庫 */
void
add_to_work
(struct handle *handle)
/* 生產線程 */
void
*product
(void
*arg)
return
null;}
/* 消費執行緒 */
void
*consumer
(void
*arg)
return
null;}
intmain
(int argc,
char
*argv)
生產消費模型在各種場景下還是比較常用的,要理解訊號量的操作及生產消費模型。 C語言之生產者與消費者模型
多執行緒併發應用程式有乙個經典的模型,即生產者 消費者模型。系統中,產生訊息的是生產者,處理訊息的是消費者,消費者和生產者通過乙個緩衝區進行訊息傳遞。生產者產生訊息後提交到緩衝區,然後通知消費者可以從中取出訊息進行處理。消費者處理完資訊後,通知生產者可以繼續提供訊息。要實現這個模型,關鍵在於消費者和...
生產者消費者模型
1.生產者消費者問題 producer consumer 有限緩衝,多執行緒同步。生產者執行緒和消費者執行緒共享固定大小緩衝區。2.關鍵是保證生產者不會再緩衝區滿時加入資料,消費者不會在緩衝區空時消耗資料。3.解決辦法 讓生產者在緩衝區滿時休眠,等下次消費者消耗緩衝區中的資料的時候,生產者才能被喚醒...
生產者消費者模型
生產者與消費者 3,2,1 三種關係 生產者與消費者 互斥,同步 消費者與消費者 互斥 生產者與生產者 互斥 條件變數 int pthread cond destroy pthread cond t cond int pthread cond init pthread cond t restrict...