作業系統經典程序同步問題之生產者 消費者問題

2021-09-23 20:43:51 字數 1139 閱讀 6738

一、生產者-消費者問題

1.問題描述:生產者-消費者模型描述的是有一群生產者程序在生產產品,並將這些產品提供給消費者程序併發進行,具備併發程式的典型特徵。pcm為使生產者程序和消費者程序併發進行,在它們之間設定乙個具有多個緩衝區的緩衝池生產者程序可以將其所生產的產品放入乙個緩衝區中,消費者程序可以從乙個緩衝區中取得產品去消費。儘管所有的生產者程序和消費者程序都是以非同步方式執行的,但他們之間必須保持同步,既不允許消費者程序從空的緩衝區中拿產品,也不允許生產者程序向滿緩衝區中放產品。

2.問題分析:我們可以利用乙個陣列來表示上述的具有n各緩衝單元的緩衝區。用輸入指標in作寫指標,每當生產者程序生產並投放乙個產品時,in加1;同理,out指標作為讀指標,每當消費者拿走乙個產品時out便加1。由於緩衝區是迴圈佇列,則加1寫成,in=(in+1)mod n,out同理。當(in+1)mod n=out時,緩衝區滿,當in=out時,緩衝區為空。此外還引入了count,當生產者生產並放入時加1,消費者拿走時則減1.

3.程式描述

共享變數

int n, buffer[n];

int in, out; //in,out[0,n-1]

int count; //count[0,n]

偽**:

void producer() 

void consumer()

利用記錄型訊號量解決

int mutex = 0, empty = n, full = 0;

int buffer[n];

int in = 0, out = 0;

void producer()

void consumer()

記錄型訊號量中wait(),和signal()操作如下:

void wait(s) 	} 

void signal(s)

每個程式中用於實現互斥的wait(mutex)和signal(mutex)必須成對出現,注意wait(empty)在生產者程序中,每個程式中多個wait操作不可顛倒,否則容易發生死鎖的現象。

作業系統之經典程序同步問題

2.哲學家進餐問題 3.讀者寫者問題 semaphore mutex 1 互斥訊號量,實現對緩衝區的互斥訪問 semaphore empty n 同步訊號量,表示空閒緩衝區的數量 semaphore full 0 同步訊號量,表示產品的數量 producer consumer semaphore m...

作業系統 程序同步經典問題

問題描述 使用乙個緩衝區來儲存物品,只有緩衝區沒有滿,生產者才可以放入物品 只有緩衝區不為空,消費者才可以拿走物品。因為緩衝區屬於臨界資源,因此需要使用乙個互斥量 mutex 來控制對緩衝區的互斥訪問。為了同步生產者和消費者的行為,需要記錄緩衝區中物品的數量。數量可以使用訊號量來進行統計,這裡需要使...

作業系統之程序同步問題

程序同步的兩種形式的制約關係 間接相互制約關係 程序互斥 程序 程序 直接相互制約關係 程序同步 程序 資源 程序 此處的資源一般指 臨界資源 在一段時間內只允許乙個程序訪問的資源。臨界資源的訪問要求互斥的訪問。講到程序同步就不得不提生產者 消費者問題了,int in 0,out 0 兩個指標,輸入...