0

我正在使用 System V 信号量,并希望在启动时阻止一个进程,并在完成其关键部分后等待另一个进程启动特定的信号量。
我认为 sem_op = 0 是正确的做法。

所以我用 1 初始化信号量。
然后在进程 A,需要阻止我使用 sem_op = 0 以等待信号量变为 0。在进程 BI 使用 sem_op = -1。(所以这使得 semaphore.val = 0)。

当另一个成功关闭信号量时,应该阻止的进程在标准输出上打印。

等待零功能实际上做了什么,我该如何正确使用它?

感谢您的时间!

4

1 回答 1

0

根据手册, semop = 0 是“等待零”操作。所以你的算法应该有效。但是,最好使用传统的 P 和 V 运算符来解决这些问题,其中 P 表示 semop = -1,V 表示 semop = +1。所以如果信号量的初始值为0,进程A应该做一个P操作并阻塞。进程 B 应完成其临界区并执行 V 操作。进程 B 执行 V 操作后,进程 A 的 P 操作就完成了,它可以继续前进。

于 2012-12-02T14:44:40.673 回答