問題描述:
若干程序通過有限的共享緩衝區交換資料。其中,"生產者"程序不斷寫入,而"消費者"程序不斷讀出;共享緩衝區共有n個;任何時刻只能有乙個程序可對共享緩衝區進行操作。
#define n 100
int count=0;
void producer ( void )
}void consumer( void )
}演算法摘要
對於生產者:
只有當緩衝區裡為零的時候,這時候消費者才有可能睡覺;
對於消費者:
只有當緩衝區裡裝滿的時候,這時候生產者才有可能睡覺。
導致的問題:類spooler目錄問題
緩衝區為空,消費者檢查,得到count=0,但未睡覺的時候,被排程程式掛起,此時它將保留乙個區域性變數來儲存count的值,此時生產者開始工作並向緩衝區內放入資源,當資源等於以後,向消費者傳送喚醒訊號,而此時消費者沒有睡眠,等消費者被恢復以後,檢查自己儲存過的count,發覺它等於零,則開始睡眠,而生產者則不停生產,當緩衝區滿了以後自己也開始睡眠,這時候他們就都處於睡眠狀態。
生產者和消費者問題c 作業系統)
生產者和消費者 include include include includeusing namespace std const unsigned short size of buffer 10 緩衝區長度 unsigned short productid 0 產品號 unsigned short ...
作業系統,生產者 消費者問題詳解
生產者 消費者問題 分析問題,確定臨界區 設定互斥訊號量,初值為1 臨界區之前對訊號量執行p操作臨界區之後對訊號量執行v操作分析問題,找出 需要實現 一前一後 的同步關係 設定同步訊號量,初始值為0 在 前操作 之後執行v操作在 後操作 之前執行p操作分析問題,畫出前驅圖,把每一對前驅關係都看成乙個...
作業系統裡的生產者 消費者問題
前段時間網上有乙個人讓我幫他改個程式,作業系統裡面生產者與消費者的那個程式,寫的一片混亂,改了好長時間。很弱智。include include include include include using namespace std define buffer num 6 int product bu...