生產者與消費者得問題描述

2021-06-20 02:36:40 字數 2199 閱讀 1722

生產者_消費者問題(參考資料;計算機作業系統)

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 喚醒正在排隊等待資源的所有執行緒結束...