【发布时间】:2012-05-06 21:22:30
【问题描述】:
这就是问题所在。厕所可以由男性或女性一次使用。如果男性或女性在给定时间在洗手间,则异性不能进入洗手间并必须等待。一旦所有的女性都出去了,那么男性就可以进入。所以,这是我的解决方案:
我想使用信号量和互斥量在线程之间执行同步。我仍然不清楚如何实现它。 这是我的想法:
- 创建一个互斥锁来锁定/解锁线程。(锁定厕所)
- 创建一个信号量来计算洗手间的人数。每个性别一个
- 信号量 male_in_restroom;
- 信号量 female_in_restroom;
- 等待男性排队,
- 等待女性排队,
首先,我检查进程是什么性别,然后检查相反性别的信号量是否大于 1。如果不是,我让他们进入洗手间。但是如果厕所里已经有异性了,我需要让这个过程等待并让它休眠。
我该如何让这个进程进入休眠状态?我找了一些例子,但仍然不知道该怎么做。
wait() 和 signal() 的函数签名示例将非常有帮助。
【问题讨论】:
-
等待一个条件变量怎么样?
-
这不是你的问题,但你不需要两个信号量。一个跟踪性别的变量和一个信号量就足够了。
-
这与现实世界的运作方式非常不同。一个浴室里的男孩+女孩是一种明显的可能性,至少需要 10 分钟。以你自己的方式塑造世界的运作方式。
标签: c++ multithreading semaphore