OS 生產者 消費者問題(有限緩衝問題)

2022-05-05 11:45:06 字數 1019 閱讀 5190

·最簡單的情形--(乙個生產者 + 乙個消費者 + 乙個大小為1的有限緩衝)

首先來分析其中的同步關係:

·必須在生產者放入乙個產品之後,消費者才能夠從緩衝中取出產品來消費。

·只有在消費者從緩衝區中取出產品(消費)之後,生產者才能再放新的產品進緩衝區。

下面我們用p(producer)來表示生產者程序,用c(consumer)來表示消費者程序,則下面是他們所要進行的操作的偽碼表示:

p:

while(true);

c:

while(true);

能不能往緩衝區放東西,取決於緩衝區的狀態:

·空--只能放,不能取

·滿--只能取,不能放

因為緩衝區大小為1,所以我們設立兩個訊號量empty = 1,full = 0

下面是改進後的**:

p:

while(true);

c:

while(true);

·生產者--消費者問題的推廣(n個緩衝區 + m個生產者 + k個消費者)也就是下圖所示的場景:

下面是改進後的**:

p:

while(true)

;//i的初值為0

c:

while(true)

;//j的初值為0

注:·生產者和消費者之間不需要互斥,所以mutex不能一樣·生產者生產產品與i的加1操作是原子的;消費者消費產品與j的加1操作也是原子的。

OS學習筆記 生產者消費者問題

緩衝池是臨界資源,因此需要為其設定乙個互斥訊號量mutex。此外,為了讓生產者和消費者都能正確使用空 滿緩衝區,還需要設定兩個資源訊號量empty和full,empty和full的初值分別為n和0.在程序選擇緩衝區時,還需要使用兩個特殊指標in和out,分別指向生產者使用的空緩衝區和消費者使用的滿緩...

生產者消費者問題

public class producer consumer class godown public godown int num public synchronized void produce int n catch interruptedexception e curr num n syste...

生產者 消費者問題

在學習程序互斥中,有個著名的問題 生產者 消費者問題。這個問題是乙個標準的 著名的同時性程式設計問題的集合 乙個有限緩衝區和兩類執行緒,它們是生產者和消費者,生產者把產品放入緩衝區,相反消費者便是從緩衝區中拿走產品。生產者在緩衝區滿時必須等待,直到緩衝區有空間才繼續生產。消費者在緩衝區空時必 須等待...