semaphore full=0;
//滿衝存數目
semaphore empty=n;
//空衝存數目
semaphore mutex=1;
//對有界緩衝
producer()
}consumer()
}
其中p(full)/p(empty)與p(mutex)的順序不能顛倒,必須先對資源訊號量進行p操作,再對互斥訊號量進行p操作,否則會導致死鎖。
p操作(wait操作)相當於此類資源數量-1;v操作(signal操作)相當於此類資源數+1
理髮椅、等待椅子、顧客看做不同的量
int waiting=0;
//顧客數量
semaphore mutex=1;
//用於互斥操作waiting
semaphore bchair=1;
//理髮椅的訊號量
semaphore wchair=n;
//等待座椅的訊號量
semaphore ready=finish=0;
//理髮師與顧客的同步訊號量
barber()
//理髮師程序
}customer()
//顧客程序
else
p(wchair)
;//占用等待座椅
p(bchair)
;//占用理髮座椅
v(wchair)
;//離開等待座椅
v(ready)
;//離開等待位置去理髮
p(finish)
;//占用理髮師
v(bchair)
;//理髮結束離開理髮椅
p(mutex)
;//占用使用waiting變數許可權
waiting--;v
(mutex)
;}
顧客、凳子、理髮椅統一為乙個變數
int chairs=n+1;
//凳子和理髮椅
semaphore ready=0;
//等待理髮顧客數量
semaphore finish=1;
//理髮師狀態
semaphore mutex=1;
//互斥訊號量
barber()
}customer()
else
v(mutex)
;//直接離開
}
(哲學家按照編號逆時針圍桌而坐,0號哲學家左手筷子為0號筷子,右手筷子為1號筷子,依次類推)
為了避免死鎖,規定奇數號的哲學家先拿起左邊筷子,然後拿起右邊筷子;偶數號的哲學家則相反
semaphero fork[5]
=;//五根筷子訊號量初值都為1
philosopher
(int i)
//i=1,2,3,4,5
else
}}
作業系統經典同步問題
經典同步問題 一 生產者 消費者問題 分析 1 無論生產者 消費者使用緩衝池時應保證互斥使用 互斥訊號量mutex 2 生產者和消費者間交叉有序 a.有序的控制最根源在產品數量上。b.設定兩個訊號量 分別針對生產者 消費者設定不同的訊號量,empty和full分別表示緩衝池中空緩衝池和滿緩衝池 即產...
作業系統 程序同步經典問題
問題描述 使用乙個緩衝區來儲存物品,只有緩衝區沒有滿,生產者才可以放入物品 只有緩衝區不為空,消費者才可以拿走物品。因為緩衝區屬於臨界資源,因此需要使用乙個互斥量 mutex 來控制對緩衝區的互斥訪問。為了同步生產者和消費者的行為,需要記錄緩衝區中物品的數量。數量可以使用訊號量來進行統計,這裡需要使...
作業系統 程序管理之經典同步問題
生產消費者模型 多生產者多消費者模型 單生產者多消費者模型 哲學家進餐 p 程序需向互斥緩衝區進行寫操作,而c 程序從互斥緩衝區進行取操作。分析 p和c互斥訪問同一臨界資源,需設定mutex 1 p和c相互同步,p提供產品給c,而c提供空間給p semaphore mutex 1,empty n,p...