經典的生產者 消費者問題(一)

2021-05-25 10:53:18 字數 907 閱讀 6394

經典的生產者─消費者問題

同步問題:

互斥訪問緩衝池

不能往「滿」的緩衝區中放產品

不能從「空」的緩衝區中取產品

生產者-消費者問題

生產者-消費者(producer-consumer)問題是著名的程序同步問題。它描述一組生產者向一組消費者提供訊息,它們共享乙個有界緩衝池,生產者向其中投放訊息,消費者從中取得訊息。以下用訊號量解決生產者-消費者問題。

假設緩衝池中有n個緩衝區,每個緩衝區存放乙個訊息,可利用互斥訊號量mutex使諸程序對 緩衝池實現互斥訪問;利用empty和full計數訊號量分別表示空緩衝及滿緩衝的數量。又假定這些生產者和消費者互相等效,只要緩衝池未滿,生產者可將 訊息送入緩衝池;只要緩衝池未空,消費者可從緩衝池取走乙個訊息。

生產者-消費者問題(續)

其中,mutex,empty,full的初始值分別為1,n,0;

p.v操作討論

1) 訊號量的物理含義:

s>0表示有s個資源可用

s=0表示無資源可用

s<0則| s |表示s等待佇列中的程序個數

p(s):表示申請乙個資源

v(s)表示釋放乙個資源。訊號量的初值應該大於等於0

2) p.v操作必須成對出現,有乙個p操作就一定有乙個v操作

當為互斥操作時,它們同處於同一程序

當為同步操作時,則不在同一程序中出現

如果p(s1)和p(s2)兩個操作在一起,那麼p操作的順序至關重要,乙個同步p操作與乙個互斥p操作在一起時同步p操作在互斥p操作前而兩個v操作無關緊要

p.v操作的優缺點

p.v操作優點:

簡單,而且表達能力強(用p.v操作可解決任何同步互斥問題)

缺點:不夠安全;

p.v操作使用不當會出現死鎖;

遇到複雜同步互斥問題時實現複雜

經典問題生產者 消費者問題

生產者 productor 將產品交給店員 clerk 而消費者 customer 從店員處 取走產品,店員一次只能持有固定數量的產品 此如 20 如果生產者試圖 生產更多的產品,店員會叫生產者停 下,如果店中有空位放產品了再通 知生產者繼續生產 如果店中沒有產品了,店員會告訴消費者等 一下,如 果...

經典例題 生產者 消費者

package com.day0207 2 執行緒通訊的應用 經典例題 生產者 消費者 生產者 productor 將產品交給店員 clerk 而消費者 customer 從店員處取走產品,會叫生產者停一下,如果店中有空位放產品了再通知生產者繼續生產 如果店中沒有產品 了,店員會告訴消費者等一下,如...

生產者消費者問題

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