生產者-消費者問題描述的是:有一群生產者程序在生產產品,並將這些產品提供給消費者程序去消費。為使生產者程序與消費者程序能夠併發執行,在兩者之間設定了乙個具有n個緩衝區的緩衝池,生產者程序將它所生產的產品放入乙個緩衝區中;消費者程序可以從乙個緩衝區中取走產品去消費。儘管所有的生產者和消費者程序都是以非同步方式執行的,但它們之間必須保持同步,即不允許消費者程序到乙個空緩衝區去取產品;也不允許生產者程序向乙個已經裝滿產品的緩衝區中投放產品。
這是乙個同步與互斥共存的問題。
生產者—消費者問題是乙個同步問題。即生產者和消費者之間滿足如下條件:
(1) 消費者想接收資料時,有界緩衝區中至少有乙個單元是滿的。
(2) 生產者想傳送資料時,有界緩衝區中至少有乙個單元是空的。
故設定兩個訊號量:
(1) empty:說明空緩衝區的數目,初值為有界緩衝區的大小n。
(2) full:說明已用緩衝區的數目,初值為0。
由於有界緩衝區是臨界資源,因此,各生產者程序和各消費者程序之間必須互斥執行。故設定乙個互斥訊號量mutex,其初值為1。
#include #include #include #include #include using namespace std;
const int limit = 30; //生產總量
const int maxsize = 10; //緩衝區大小
const int kind = 7;
int bufidx = 0; //當前緩衝區下標
string buf[maxsize]; //緩衝區 (字串)
string product =;
handle mutex,full,empty;
handle disp;
//生產者子過程
dword winapi producer(lpvoid param)
cout << "consumer quit!" << endl << endl;
return 0;
}//消費者子過程
dword winapi consumer(lpvoid param)
cout <<"consumer quit!"<< endl;
return 0;
}int main()
//等待直到消費者執行緒執行完成
if (consumerhandle != null)
system("pause");
}
程序控制與程序同步(筆記)
程序控制 1.程序的建立 1 乙個程序建立另一程序的事件 原因 使用者登入 分時情況下使用者的請求 作業排程 批處理中 提供服務 執行中的使用者程式提出功能請求,要建立服務程序 如列印服務 應用請求 應用程式自己建立程序,完成特定功能的新程序。木馬程式 2 建立過程 1 申請空白pcb 2 為新程序...
程序同步(一) 程序同步相關概念
在os中引入程序後,雖然提高了資源的利用率和系統吞吐量,但是由於程序的非同步性將會給系統造成混亂,尤其是他們在爭搶臨界資源時。當多個程序去爭用共享變數 鍊錶時,可能導致資料處理出錯。程序同步的任務就是對多個相關程序在執行次序上進行協調,使得併發執行的程序之間能有效地共享資源和相互合作,從而使程式的執...
Linux程序同步
linux程序同步 概述 程序間通訊 ipc 方法主要有以下幾種 管道 fifo 共享記憶體 訊息佇列 訊號量 1.管道中還有命名管道和非命名管道 即匿名管道 之分,非命名管道 即匿名管道 只能用於父子程序通訊,命名管道可用於非父子程序,命名管道就是fifo,管道是先進先出的通訊方式 2.訊息佇列是...