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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

理发师问题

發布時間:2024/3/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理发师问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述:

理發店里有一位理發師、一把理發椅和n 把供等候理發的顧客坐的椅子。如果沒有顧客,理發師便在理發椅上睡覺;當一個顧客到來時,它必須叫醒理發師;如果理發師正在理發時又有顧客來到,那么,如果有空椅子可坐,顧客就坐下來等待,否則就離開理發店。

分析:

引入3 個信號量和一個控制變量:控制變量waiting 用來記錄等候理發的顧客數,初值均為0;信號量customers 用來記錄等候理發的顧客數,并用作阻塞理發師進程,初值為0;信號量barbers 用來記錄正在等候顧客的理發師數,并用作阻塞顧客進程,初值為0;信號量mutex 用于互斥,初值為1。

算法:

var waiting : integer; /等候理發的顧客數/
CHAIRS:integer; /為顧客準備的椅子數/
customers, barbers,mutex : semaphore;
customers := 0; barbers := 0;
waiting := 0; mutex := 1;
procedure barber;
begin
while(TRUE); /理完一人,還有顧客嗎?/
P(customers); /若無顧客,理發師睡眠/
P(mutex); /進程互斥/
waiting := waiting – 1; /等候顧客數少一個/
V(barbers); /理發師去為一個顧客理發/
V(mutex); /開放臨界區/
cut-hair( ); /正在理發/
end;
procedure customer
begin
P(mutex); /進程互斥/
if waiting < CHAIRS /看看有沒有空椅子/
begin
waiting := waiting + 1;/* 等候顧客數加1*/
V(customers); /必要的話喚醒理發師/
V(mutex); /開放臨界區/
P(barbers); /無理發師,顧客坐著養/
get-haircut( ); /一個顧客坐下等理發/
end;
else V(mutex); /人滿了,走吧!/
end.

總結

以上是生活随笔為你收集整理的理发师问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。