假設「生產者」程序不斷向共享緩衝區寫人資料(即生產資料),而「消費者」程序不斷從共享緩衝區讀出資料(即消費資料);共享緩衝區共有n個;任何時刻只能有乙個程序可對共享緩衝區(臨界區)進行操作。所有生產者和消費者之間要協調,以完成對共享緩衝區的操作。
//共享緩衝區的大小in,
out:
0..k-1;
//in記錄第乙個空緩衝區,out記錄第乙個不空的緩衝區
empty,full,mutex: semaphore;
//empty:無資料的緩衝塊,控制緩衝區不滿
// full:有資料的緩衝塊控制緩衝區不空
// mutex保護臨界區
//初始化
empty=k,full=
0,mutex=
1 cobegin
procedure producer: procedure consumer:
while
true then while
true then
begin begin
produce
(&item);p
(full);p
(empty);p
(mutex);p
(mutex)
; item:
=buffer[
out]
;out:=
(out+1
)mod k;
buffer[in]
:=item;
v(mutex);in
:=(in
+1) mod k;
v(empty);v
(mutex)
;consume
(&item);v
(full)
; end
endcoend
pv 生產者和消費者
include include include include define buffer size 8 struct products int bufferisfull struct products products return 0 int bufferisempty struct produ...
PV原理操作之生產者消費者
緩衝區大小為k semaphore mutex 1 in,out的互斥變數 semaphore empty k 可用的緩衝區大小 semaphore full 0 已占用的緩衝區的大小 semaphore buff k 緩衝區 int in 0,out 0 寫 讀指標 producer consum...
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...