操作系统中PV操作之顾客理发师问题
生活随笔
收集整理的這篇文章主要介紹了
操作系统中PV操作之顾客理发师问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
PV操作:對信號量進行相應操作
S:信號量
P:請求操作,相當于S=S-1;S>=0,進程繼續進行
V:釋放操作,相當于S=S+1,S>0,進程被喚醒
理發師問題?
一個理發師,一把理發椅,n把等候理發的顧客椅子,如果沒有顧客則理發師便在理發椅上睡覺 ,當有一個顧客到達時,首先看理發師在干什么,如果理發師在睡覺,則喚醒理發師理發,如果理發師正在理發,則查看是否有空的顧客椅子可坐, ?如果有,坐下等待,如果沒有,則離開。?定義信號量:wait=0:顧客信號量 ? barber=0:理發師信號量
? ? ? ? ? ? ? ? ? ?custNum:當前顧客數量 ? mutex=1:互斥量
理發師操作:
Barber(){
while(1){
? ? ? ? P(wait); ? ?//喚醒等待的一位顧客
? ? ? ? P(mutex); ?//顧客被喚醒,準備理發,沒有顧客,則睡覺
? ? ? ? custNum--; ? ?//當前店里顧客數減1
? ? ? ? ?V(barber); ? //有顧客來了,醒來理發
? ? ? ? V(mettux): ? //釋放互斥信號量
}
}
顧客操作:
Customer(){
while(1){
P(mutex); ? ?//顧客想要理發
if(custNum<N){ ? //店里人沒有滿
? ? ?custNum++;
? ? ?V(wait); ? ? //理發師睡覺的話,喚醒他理發
? ? ?V(mutex); ? ?//釋放互斥量,理發這一動作成功
? ? ?P(baber); ? ?//理發師進行理發操作
}
else
{
? ? ? ?V(metux); ? ?//釋放互斥量,打消進店理發的舉動
}
}
}
總結
以上是生活随笔為你收集整理的操作系统中PV操作之顾客理发师问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis Lua脚本实现原子性操作
- 下一篇: Android studio 关于SQl