PV操作系列 生產者 消費者

2021-10-06 11:20:34 字數 1153 閱讀 3319

假設「生產者」程序不斷向共享緩衝區寫人資料(即生產資料),而「消費者」程序不斷從共享緩衝區讀出資料(即消費資料);共享緩衝區共有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...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...