使用不同的信号量同步线程客户端

问题描述

程序的要点:您需要模拟酒店的工作,其中线程是客户。酒店拥有每晚 1000 积分的 3 间客房、每晚 1500 积分的 5 间客房和每晚 2500 积分的 1 间客房。进入酒店的客户有一定的金额,如果有空的话,根据他的经济能力得到一个房间。如果客户可用的房间中没有空房,客户就会离开寻找另一个地方过夜。创建一个模拟酒店运营的应用。

我的想法是这样的: 酒店房间的每个类别都有一个信号量(即只有三个)。我创建线程,每个线程都有一定数量的积分。客户总是选择更昂贵的选项,这对他来说是负担得起的(假设这将通过条件循环实现)。

但这里有一个问题:

  1. 如果酒店房间在金钱方面可供客户使用,但所有房间都将被占用怎么办:在这种情况下,线程将进入等待状态,并且必须等待另一个线程退出受控资源并传递信号量,但在分配时,它应该转到更便宜的版本(即,它应该从“昂贵”的信号量变为“更便宜”的信号量)
  2. 我可以使用 WaitForSingleObject (handle,0) 检查信号量的信号状态,其中 0 是等待时间(即立即返回)。如果函数返回 WAIT_OBJECT_0,则意味着线程应该转到更便宜的信号量。但问题是检查信号量的信号状态的过程不是原子的,然后可能会发生线程竞争,当两个线程都收到信号量的计数器为1的信息时,然后它们都会尝试通过信号量,但只有一个线程能够做到这一点......

注意事项:

  1. WinAPI
  2. 在这个节目中只有一晚(大约 5 秒),之后节目结束
  3. 受控资源中的线程休眠 5 秒
  4. 当所有线程都关闭时程序结束
  5. 如果流没有找到酒店房间,它会立即关闭

有人知道如何绕过信号量限制吗?或者也许值得以某种方式以不同的方式实现该程序(使用互斥锁、事件)?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)