分享
 
 
 

用C#模拟“嗜睡的理发师”问题

王朝学院·作者佚名  2009-11-10
窄屏简体版  字體: |||超大  

近日,一直在思考操作系统老师留给我们的一个进程同步问题。

问题是这样的:一个理发店由一个有N张沙发的等待室和一个放有一张理发椅的理发室组成。没有顾客要理发时,理发师便去睡觉。当一个顾客走进理发店时,如果所有的沙发都已被占用,他便离开理发店;否则,如果理发师正在为其他顾客理发,则该顾客就找一张空沙发坐下等待;如果理发师因无顾客正在睡觉,则由新到的顾客唤醒理发师为其理发。在理发完成后,顾客必须付费,直到理发师收费后才能离开理发店。试用信号量实现这一同步问题。并编写一程序进行模拟。

因为刚学过进程管理这一内容。用信号量实现并不困难。

分析可知:顾客进程和理发师进程之间存在着多种同步关系:

(1)只有在理发椅空闲时,顾客才能坐到理发椅上等待理发师理发,否则顾客便必须等待;只有当理发椅上有顾客时,理发师才可以开始理发,否则他也必须等待。这种同步关系类似于单缓冲(对应于理发椅)的生产者——消费者问题中的同步关系,故可通过信号量empty和full来控制。

(2)顾客理完发后必须向理民师付费,并等理发师收费后才能离开,而理发师则需等待顾客付费,并在收费后通知顾客离开,这可分别通过两个信号量payment和receipt来控制。

(3)等候室中N张沙发是顾客进程竞争的资源,故还需要为它们设置一个资源信号量sofa。

(4)为了控制顾客人数,使顾客能在所有的沙发都被占用时离开理发店,还必须设置玫个整型变量count来外处理理发店中的顾客进行计数,该变量将被多个顾客进程互斥地访问并修改,这可通过一个互斥信号量mutex来实现。

所以为解决这一问题,需要设置一个整型变量count用来对理发店中的顾客进行计数,并需设置6个信号量。其中:mutex用来实现顾客进程对count变量的互斥访问,其初值为1;sofa是对应于等待室中N张沙发的资源信号量,其初值为N;empty表示是否空闲的理发椅,其初值为1;full表示理发椅上是否坐有等待理发的顾客,其初值为0;payment用业等待付费,其初值为0;receipt用来等待收费,其初值为0;具体的算法描述如下:

var count:iteger=0;

mutex,sofa,empty,full:semaphore:=1,N,1,0;

cut,payment,receipt:semaphore:=0,0,0;

begin

parbegin

guest:begin

wai(mutex);

if(count>N) then

begin

signle(mutex);

离开理发店;

end

else

begin

count:=coun+1;

if(count>1) then

begin

wait(sofa);

在沙发中就坐;

wait(empty);

从沙发上起来;

signal(sofa);

end

else /* count=1 */

wait(empry);

在理发椅上就坐;

sinal(full);

理发;

付费;

sinal(payment);

wait(receipt);

从理发椅上起来;

signal(empty);

wait(mutex);

count:=count-1;

signal(mutex);

离开理发店;

end

end

barber:begin

repeat

wait(full);

替顾客理发;

wait(payment);

收费;

sinal(receipt);

untile false;

end

parend

end

算法出来了,但现在问题是如何用程序来模拟呢?

因为我们对C#语言比较熟悉,所以首先想到设计一个windows应用程序来模拟。在C#中命各空间System.Threading定义了许多有关线程同步和互斥的类和方法。但具体该怎样使用我还不得要领,思考中……

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有