【问题标题】:Multiprocess Synchronization with a Single Semaphore使用单个信号量进行多进程同步
【发布时间】:2009-10-25 23:12:07
【问题描述】:

我们正在学习的课程中介绍多线程编程。教授提出了一个我一直在尝试但无济于事的额外问题:

每个进程 P0、P1、P2 和 P3 都必须等待其他三个跨过或到达其代码中的特定同步点,然后该进程才能跨过自己的同步点。

我已经知道如何用四个信号量回答这个问题,难的是只用一个信号量。

关于如何进行的任何建议或提示?

【问题讨论】:

  • 你对问题的措辞有点不准确,所以你不太可能得到好的指导。

标签: semaphore


【解决方案1】:

如果不是二进制信号量,只需将信号量初始化为 -4。

【讨论】:

  • 我没有对你投反对票,但我怀疑这是因为你不能用负值初始化信号量。在 POSIX 中,该值是无符号的,并且 Windows 文档明确声明了 0 或更大的值。
  • 这是相当有限的:我经常需要一个反向信号量,但我永远找不到。虽然由于软件限制不可能,但他的回答完全合乎逻辑。不过,欢迎提供一些解释。
  • 这是一个有用的结构,如果您四处搜索,您可以找到各种实现,但我觉得对于确切的语义应该是什么没有达成共识。
  • 这是我想出的解决方案......但正如其他评论者(和我的教授)所指出的那样,这是不允许的。
【解决方案2】:

您对施加于您的解决方案的限制有点了解,但请参阅The Little Book of Semaphores 并通读有关障碍的部分。这应该会给你一些想法。

【讨论】:

  • 感谢您提供的资源,这应该很有帮助。
【解决方案3】:

原来教授的意思是说你可以使用两个信号量而不是一个。他相信,正如我在考虑了一段时间后所做的那样,使用单个信号量是不可能的。

【讨论】:

  • 这就是为什么我评论你没有提到太多关于约束的原因。您可以使用一个信号量和保护计数器的互斥量来做到这一点,但我不确定您是否可以使用互斥量,或者它们是否可以算作第二个信号量。
猜你喜欢
  • 2015-04-13
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 2016-07-31
相关资源
最近更新 更多