- 理发师问题:理发店有一个出口一个入口,没顾客的时候理发师在打瞌睡,有顾客的时候理发师在椅子上等待的顾客中选出顾客来理发,顾客进店就坐在椅子上等待(也有做沙发),没有椅子坐的人就站着排队(也有的省去站着排队的环节,以下就是),连站着排队的位置也没有的时候就直接离开。它的实质是生产者和消费者的问题。
- lock variable--用变量记录有多少顾客在等。这种做法是不行的,它无法解决以下情况:当还剩下一个位置,两个顾客同时进来,其中一个线程已经通过if判断还未++waits时,另一个线程正进行if判断,它认为也可以进去,结果就是这时两个顾客都进来了。
- semaphore--解决这个问题就要保证critical region中只有一个线程在执行,waits这种变量也在临界区里更新,用mutex(互斥)实现。还要记录理发师、顾客数量这两个信号(semaphore)。
- 释放信号后会唤醒一些线程,唤醒哪个不是自己控制,是库函数控制的
- 用到的一些windowsAPI,
理发师问题--windows下C++实现
最新推荐文章于 2022-12-01 21:14:51 发布
理发师问题实质是生产者消费者问题,通过semaphore解决并发冲突。本文介绍了使用Windows API实现,包括WaitForSingleObject和ReleaseSemaphore,并探讨了不同逻辑下的伪代码和实际代码实现。
摘要由CSDN通过智能技术生成