c语言进程同步理发师问题,进程同步-理发师问题。

这篇博客探讨了一个理发店的同步问题,涉及到理发师和顾客之间的交互。使用信号量来实现同步,包括empty和full控制理发椅状态,cut等待理发完成,payment和receipt处理付费过程,以及sofa管理等候室沙发资源。此外,还通过count和mutex信号量管理顾客数量和互斥访问。这是一个多进程同步的经典案例,结合了生产者-消费者、读者-写者问题的元素。
摘要由CSDN通过智能技术生成

问题描述:

一个理发店由一个N张沙发的等候室和一张理发椅组成。没有顾客理发时,理发师便去睡觉。

当一个顾客走进理发店的时候,如果所有的沙发都满了,便离开理发店;否则,如果理发师正在给其他顾客理发,则找一张空沙发坐下等待;如果理发师因无顾客正在理发,则新到的顾客唤醒理发师为其理发,在理发后,

顾客必须付费,直到理发师收费后才离开理发店。使用信号量实现这一同步问题。

分析:在本题中顾客进程和理发师进程之间存在多种同步关系。

1,只有理发椅空闲时,顾客才能坐到理发椅上等待理发师理发,否则顾客必须等待。

只有理发椅上有顾客时,理发师才能开始理发,否则必须等待。

这种同步关系类似单缓冲池的生产者和消费者问题中的同步关系,故可用信号量empty和full来实现。

2,理发师为顾客理发时,顾客必须等待理发的完成,并在理完发后理发师将其唤醒他。这可单独使用信号量cut来控制。这种关系和生产者向缓冲区中添加产品和消费者从缓冲区中取出一件产品一样。当生产者向缓冲区中添加了一件产品后,从等待队列中选出一个消费者进程将其唤醒一样。

3,顾客理完发后必须向理发师付费,并等理发师收费后顾客才能离开;而理发师则需要等待顾客付费,并在收费后将其唤醒后才能离开,这可以分别通过两个信号量payment和receipt来控制。

4,等候室中的N张沙发是顾客竞争的资源,故还需设置一个资源信号量sofa.

5,

为了控制顾客的人数,使顾客能在所有座位被占用的情况下离开理发店,还必须涉资一个整型变量count

来对理发店中的顾客人数进行统计,该变量将被多个顾客进程互斥的访问并修改,这可通过一个互斥信号量

mutex来实现。这个类似读者-写着问题中,第一个进来的读者进程要将互斥信号量wmutex wait()操作。

最后一个进来的读者需要wmutex sigal()操作。

为解决上述问题,需要设置一个整型变量count来对理发店中的顾客进行统计。

一共需要七个信号量来实现顾客进程对count来互斥访问,将其初值设为1.

sofa是对应于等候室中的N张沙发的资源信号量,初值设为N.

empty来表示是否空闲的理发椅,其初值设为1,

full表示理发椅是否有等待理发椅的顾客,其初值为0.

cut用来等待理发的完成,其初值为0.

payment表示用来等待付费,其初值为0.

receipt用来等待收费,其初值为0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值