定義:
生產者消費者問題(英語:producer-consumer problem),也稱有限緩衝問題(英語:bounded-buffer problem),是乙個多執行緒同步問題的經典案例。該問題描述了共享固定大小緩衝區的兩個執行緒——即所謂的「生產者」和「消費者」——在實際執行時會發生的問題。生產者的主要作用是生成一定量的資料放到緩衝區中,然後重複此過程。與此同時,消費者也在緩衝區消耗這些資料。該問題的關鍵就是要保證生產者不會在緩衝區滿時加入資料,消費者也不會在緩衝區中空時消耗資料。
訊號量解決方法:
item b[k]
;//k個緩衝區
semaphore empty=k,full=
0,metux=1;
//空的和滿的緩衝區的個數,以及互斥訊號量
int in=
0,out=0;
//指標
cobegin
process producer_i()
} coend
cobegin
process consumer_i()
}
讀者寫者問題
「讀者—寫者」問題—記錄型訊號量
乙個資料檔案或記錄可被多個程序共享。
只要求讀檔案的程序稱為「reader程序」,其它程序則稱為「writer程序」。
允許多個程序同時讀乙個共享物件,但不允許乙個writer程序和其他reader程序或writer程序同時訪問共享物件
「讀者—寫者問題」是保證乙個writer程序必須與其他程序互斥地訪問共享物件的同步問題。
對於乙個檔案,同一時間允許多個讀者讀,只允許乙個寫者寫。
int count=0;
//在讀的個數
semaphore mutex=
1,writeblock=1;
//二元訊號量,和讀者鎖
cobegin
process reader_i()
p(mutex)
; count--;if
(count==0)
v(writeblock);v
(mutex);}
cend
cobegin
process writer_i()
v(writeblock);}
coend
1、沒有顧客,理髮師睡覺
2、某位顧客到來,顧客必須叫醒理髮師
3、如果顧客到來後,理髮師在理髮,如果有空椅子,等待,沒有的話,離開。
int waiting=
0,chair=n;
//等待的顧客數
semaphore customers=
0,babres=
0,mutex=1;
cobegin
proecss baber()
}coend
cobegin
process customer()
else
v(mutex)
;}
生產者消費者問題
public class producer consumer class godown public godown int num public synchronized void produce int n catch interruptedexception e curr num n syste...
生產者 消費者問題
在學習程序互斥中,有個著名的問題 生產者 消費者問題。這個問題是乙個標準的 著名的同時性程式設計問題的集合 乙個有限緩衝區和兩類執行緒,它們是生產者和消費者,生產者把產品放入緩衝區,相反消費者便是從緩衝區中拿走產品。生產者在緩衝區滿時必須等待,直到緩衝區有空間才繼續生產。消費者在緩衝區空時必 須等待...
生產者 消費者問題
1 程序互斥問題 緩衝區b是臨界資源,程序p和c不能同時對b進行操作,即只能互斥的操作 2 程序同步問題 p不能往 滿 的的緩衝區b放產品,c不能從空的緩衝區獲得產品。當緩衝區滿時,c必須先於p執行,當緩衝區空時,p必須先於c執行 我們給出如下基於記錄型 二元 訊號量機制的解法 10 9 2013 ...