日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言cobegin用法,用C语言实现P、V操作

發(fā)布時(shí)間:2024/1/23 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言cobegin用法,用C语言实现P、V操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

該樓層疑似違規(guī)已被系統(tǒng)折疊?隱藏此樓查看此樓

2.理發(fā)師問題:一個理發(fā)店有一個入口和一個出口。理發(fā)店內(nèi)有一個可站5 位顧客的站席

區(qū)、4 個單人沙發(fā)、3 個理發(fā)師及其專用理發(fā)工具、一個收銀臺。新來的顧客坐在沙發(fā)上等

待;沒有空沙發(fā)時(shí),可在站席區(qū)等待;站席區(qū)滿時(shí),只能在入口外等待。理發(fā)師可從事理

發(fā)、收銀和休息三種活動。理發(fā)店的活動滿足下列條件:

1)休息的理發(fā)師是坐地自己專用的理發(fā)椅上,不會占用顧客的沙發(fā);

2)處理休息狀態(tài)的理發(fā)師可為在沙發(fā)上等待時(shí)間最長的顧客理發(fā);

3)理發(fā)時(shí)間長短由理發(fā)師決定;

4)在站席區(qū)等待時(shí)間最長的顧客可坐到空閑的理發(fā)上;

5)任何時(shí)刻最多只能有一個理發(fā)師在收銀。

試用信號量機(jī)制或管程機(jī)制實(shí)現(xiàn)理發(fā)師進(jìn)程和顧客進(jìn)程。

原理:

(1)customer 進(jìn)程:

首先檢查站席區(qū)是否已滿(stand_capacity),若滿選擇離開,否則進(jìn)入站席區(qū),即進(jìn)入

理發(fā)店。在站席區(qū)等待沙發(fā)的空位(信號量sofa),如果沙發(fā)已滿,則進(jìn)入阻塞等待隊(duì)列,

直到出現(xiàn)空位,在站席區(qū)中等待時(shí)間最長的顧客離開站席區(qū)(stand_capacity)。坐到沙

發(fā)上,等待理發(fā)椅(barber_chair),如果理發(fā)椅已滿,則進(jìn)入阻塞等待隊(duì)列,直到出現(xiàn)

空位,在沙發(fā)上等待時(shí)間最長的顧客離開沙發(fā)(釋放信號量sofa)。坐到理發(fā)椅上,釋放

準(zhǔn)備好的信號(customer_ready),獲得該理發(fā)師的編號(0~1 的數(shù)字)。等待理發(fā)師理

發(fā)結(jié)束(finished[barber_number])。在離開理發(fā)椅之前付款(payment),等待收據(jù)

(receipt),離開理發(fā)椅(leave_barberchair)。最后離開理發(fā)店。

這里需要注意幾點(diǎn):

a) 首先是幾個需要進(jìn)行互斥處理的地方,主要包括:進(jìn)入站席區(qū)、進(jìn)入沙發(fā)、進(jìn)入理發(fā)椅

和付款幾個地方。

b) 通過barber_chair 保證一個理發(fā)椅上最多只有一名顧客。但這也不夠,因?yàn)閱螒{

baber_chair 無法保證一名顧客離開理發(fā)椅之前,另一位顧客不會坐到該理發(fā)椅上,

因此增加信號量leave_barberchair,讓顧客離開理發(fā)椅后,釋放該信號,而理發(fā)

師接收到該信號后才釋放barber_chair 等待下一位顧客。

c) 在理發(fā)的過程中,需要保證是自己理發(fā)完畢,才能夠進(jìn)行下面的付款、離開理發(fā)椅的活

動。這個機(jī)制是通過customer 進(jìn)程獲得給他理發(fā)的理發(fā)師編號來實(shí)現(xiàn)的,這樣,當(dāng)

該編號的理發(fā)師釋放對應(yīng)的finished[i]信號的時(shí)候,該顧客才理發(fā)完畢。

d) 理發(fā)師是通過mutex 信號量保證他們每個人同時(shí)只進(jìn)行一項(xiàng)操作(理發(fā)或者收款)。

e) 為了保證該顧客理發(fā)完畢后馬上可以付款離開,就應(yīng)該保證給該顧客理發(fā)的理發(fā)師在理

發(fā)完畢后馬上到收銀臺進(jìn)入收款操作而不是給下一位顧客服務(wù)。在偽碼中由以下機(jī)制實(shí)

現(xiàn):即顧客在釋放離開理發(fā)椅的信號前,發(fā)出付款的信號。這樣該理發(fā)師得不到顧客的

離開理發(fā)椅的信號,不能進(jìn)入下一個循環(huán)為下一名顧客服務(wù),而只能進(jìn)入收款臺的收款

操作。直到顧客接到收據(jù)后,才釋放離開理發(fā)椅的信號,離開理發(fā)椅,讓理發(fā)師釋放該

理發(fā)椅的信號,讓下一位等待的顧客坐到理發(fā)椅上。

(2)barber 進(jìn)程

首先將該理發(fā)師的編號壓入隊(duì)列,供顧客提取。等待顧客坐到理發(fā)椅坐好(信號量

customer_ready),開始理發(fā),理發(fā)結(jié)束后釋放結(jié)束信號(finished[i])。等待顧客

離開理發(fā)椅(leave_barberchair)(期間去收銀臺進(jìn)行收款活動),釋放理發(fā)椅空閑信

號(barber_chair),等待下一位顧客坐上來。

(3)cash(收銀臺)進(jìn)程

等待顧客付款(payment),執(zhí)行收款操作,收款操作結(jié)束,給付收據(jù)(receipt)。

信號量總表:

信號量 wait signal

stand_capacity 顧客等待進(jìn)入理發(fā)店 顧客離開站席區(qū)

sofa 顧客等待坐到沙發(fā) 顧客離開沙發(fā)

barber_chair 顧客等待空理發(fā)椅 理發(fā)師釋放空理發(fā)椅

customer_ready 理發(fā)師等待,直到一個顧客坐

到理發(fā)椅

顧客坐到理發(fā)椅上,給理發(fā)師

發(fā)出信號

mutex 等待理發(fā)師空閑,執(zhí)行理發(fā)或

收款操作

理發(fā)師執(zhí)行理發(fā)或收款結(jié)束,

進(jìn)入空閑狀態(tài)

mutex1 執(zhí)行入隊(duì)或出隊(duì)等待 入隊(duì)或出隊(duì)結(jié)束,釋放信號

finished[i] 顧客等待對應(yīng)編號理發(fā)師理

發(fā)結(jié)束

理發(fā)師理發(fā)結(jié)束,釋放信號

leave_barberchair 理發(fā)師等待顧客離開理發(fā)椅 顧客付款完畢得到收據(jù),離開

理發(fā)椅釋放信號

payment 收銀員等待顧客付款 顧客付款,發(fā)出信號

receipt 顧客等待收銀員收、開具收據(jù)收銀員收款結(jié)束、開具收據(jù),

釋放信號

總結(jié)

以上是生活随笔為你收集整理的c语言cobegin用法,用C语言实现P、V操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。