等待零信号量操作的确切功能是什么?

时间:2012-12-02 14:04:25

标签: linux process semaphore

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

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

当另一个成功地使信号量下降时,应该被阻止的进程在stdout上打印。

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

感谢您的时间!

1 个答案:

答案 0 :(得分:0)

根据手册,semop = 0是“等待零”操作。所以你的算法应该可行。但是,最好使用传统的P和V算子解决这些问题,其中P表示semop = -1,V表示semop = +1。因此,如果信号量的初始值为0,则进程A应执行P操作并阻塞。过程B应完成其关键部分并执行V操作。一旦过程B执行V操作,过程A的P操作就会完成并且可以提前进行。