C語言之 生產消費者模型

2021-09-02 15:22:02 字數 1388 閱讀 3384

生產消費者模型,主要考驗的就是對互斥這部分的理解,下面就用了簡單的例子來談一談經典的生產消費者模型。

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...