理发师问题--windows下C++实现


  • 理发师问题:理发店有一个出口一个入口,没顾客的时候理发师在打瞌睡,有顾客的时候理发师在椅子上等待的顾客中选出顾客来理发,顾客进店就坐在椅子上等待(也有做沙发),没有椅子坐的人就站着排队(也有的省去站着排队的环节,以下就是),连站着排队的位置也没有的时候就直接离开。它的实质是生产者和消费者的问题。
  • lock variable--用变量记录有多少顾客在等。这种做法是不行的,它无法解决以下情况:当还剩下一个位置,两个顾客同时进来,其中一个线程已经通过if判断还未++waits时,另一个线程正进行if判断,它认为也可以进去,结果就是这时两个顾客都进来了。
  • semaphore--解决这个问题就要保证critical region中只有一个线程在执行,waits这种变量也在临界区里更新,用mutex(互斥)实现。还要记录理发师、顾客数量这两个信号(semaphore)。
  • 释放信号后会唤醒一些线程,唤醒哪个不是自己控制,是库函数控制的
  • 用到的一些windowsAPI,
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值