用PV操作 實現生產者 消費者問題(C 語言)

2021-08-26 19:50:19 字數 1176 閱讀 8143

/**

功能:實現生產者和消費者正常活動

題目內容:生產者-消費者問題,是指兩組程序共享乙個環形的緩衝區。一組程序被稱為生產者,另一組程序被稱為消費者。

緩衝池是由若干個(程式假設為4個)大小相等的緩衝區組成的,每個緩衝區可以容納乙個產品。生產者程序不斷地將生產的產品放入緩衝池,

消費者程序不斷地將產品從緩衝池取出。用pv操作實現生產者和消費者的正常活動的程式

題目分析:

在生產者-消費者問題中,既存在程序同步問題,也存在著臨界區的互斥問題。當緩衝區都滿時,表示供大於求,

生產者停止生產,進入等待狀態,同時喚醒消費者;當緩衝區都空時,表示供不應求,消費者停止消費,喚醒生產者。

這說明了,生產者和消費者存在同步關係。

對於緩衝池,它顯然是乙個臨界資源,所有的生產者和消費者都要使用它,

而且都要改變它的狀態,故對於緩衝池的操作必須是互斥的。

*/#include#includeusing namespace std;

const int n=4;

//宣告全域性變數

int i=0,j=0; //i和j分別指向緩衝區

int buffer[n]; //緩衝池

int itemp=0; //用來存放生產的產品

int itemc=0; //用來存放消費的產品

//宣告控制代碼

handle mutex; //緩衝池訊號量

handle empty; //空緩衝區訊號量

handle full; //滿緩衝區訊號量

handle pthread; //producer執行緒控制代碼

handle cthread; //consumer執行緒控制代碼

//宣告程序函式

dword winapi producer(lpvoid ipparameter);

dword winapi consumer(lpvoid ipparameter);

int main()

{ //建立訊號量

mutex = createsemaphore(null,1,1,null);

empty = createsemaphore(null,1,4,null);

full = createsemaphore(null,0,4,null);

cout<

用PV操作 實現生產者 消費者問題(C 語言)

功能 實現生產者和消費者正常活動 題目內容 生產者 消費者問題,是指兩組程序共享乙個環形的緩衝區。一組程序被稱為生產者,另一組程序被稱為消費者。緩衝池是由若干個 程式假設為4個 大小相等的緩衝區組成的,每個緩衝區可以容納乙個產品。生產者程序不斷地將生產的產品放入緩衝池,消費者程序不斷地將產品從緩衝池...

PV操作系列 生產者 消費者

假設 生產者 程序不斷向共享緩衝區寫人資料 即生產資料 而 消費者 程序不斷從共享緩衝區讀出資料 即消費資料 共享緩衝區共有n個 任何時刻只能有乙個程序可對共享緩衝區 臨界區 進行操作。所有生產者和消費者之間要協調,以完成對共享緩衝區的操作。共享緩衝區的大小in,out 0.k 1 in記錄第乙個空...

pv 生產者和消費者

include include include include define buffer size 8 struct products int bufferisfull struct products products return 0 int bufferisempty struct produ...