生產者_消費者問題(參考資料;計算機作業系統)
1:利用記錄型訊號量解決生產者與消費者問題:
var mutext,empty,full:semaphore=1,n,0;
buffer :array[0,…,n-1] ofitem;
in out :interge:=0,0;
begin
parbegin
producer:begin
repeat
proceduceran item nextp;
wait(empty);
wait(mutex);
buffer(in):=nextp;
in=(in+1)mod n;
signal(mutex);
signal(full);
until false;
endconsumer:begin
repeat
wait(full);
wait(mutex);
nextc:=buffer(out);
out:=(out+1)mod n;
signal(empty);
signal(mutex);
consumerthe item in nextc;
until false;
endparend
end2:利用and訊號量解決生產者與消費者問題:
var mutext,empty,full:semaphore=1,n,0;
buffer :array[0,…,n-1] ofitem;
in out :interge:=0,0;
begin
parbegin
producer:begin
repeat
proceduceran item nextp;
swait(empty,mutex);
buffer(in):=nextp;
in=(in+1)mod n;
ssignal(mutex.mutex);
utilfalse;
endconsumer:begin
repeat
swait(full,mutex);
nextc:=buffer(out);
out:=(out+1)mod n;
ssignal(empty,mutex);
consumerthe item in nextc;
until false;
endparend
end3:利用管程解決生產者與消費者問題:
(1):pc管道可以描述為:
type producer-consumer=monitor
varint,out,count :integer;
buffer:array[0,…,n-1] of item;
notfull,notempty:condition;
proceducerentry put(item);
begin
if(count>=n)then notfull.wait;
buffer(in):=nextp;
in:=(in+1)mod n;
count:=count+1;
ifnotempty.queue then notempty.signal;
endprocedure entry get(item)
begin
if count<=0 then notempty.wait;
nextc:=buffer(out);
out:=(out+1)mod n;
count:=count-1;
ifnotfull.queue then notfull.signal;
end(2):利用管程解決生產者與消費者問題是,可以描述為:
producer: begin
repeat
producean item in nextp;
pc.put(item);
utilfalse;
endconsumer:begin
repeat
pc.get(item);
consumer the item in nextc;
util false;
end
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...
生產者與消費者問題
使用synchronized同步鎖機制,執行緒先獲得物件的鎖,先上鎖後執行執行緒內容,執行完成後釋放鎖。使用wait 和notifyall 簡單實現生產者與消費者 public class test1 class producer implements runnablecatch interrupt...
生產者與消費者問題
知識點 生產者與消費者問題 涉及到的執行緒間通訊的方法 wait 當前執行緒掛起並放棄cpu,同步資源,使別的執行緒可訪問並修改共享資源,當前執行緒排隊等候再次對資源訪問 notify 喚醒正在排隊等待同步資源的執行緒中優先順序最高者結束等待 notifyall 喚醒正在排隊等待資源的所有執行緒結束...