我正在使用System V信号量,并希望在进程开始时阻塞它,并等待另一个进程在它完成其临界区之后启动特定的信号量。
我认为sem_op = 0将是正确的操作。
所以我将信号量初始化为1。
然后在进程A,这需要被阻塞,我使用sem_op = 0,以便等待信号量变为0。在进程B中,我使用sem_op = -1。(因此,这使得semaphore.val = 0)。
当另一个进程成功地关闭信号量时,应该被阻塞的进程在stdout打印。
wait for zero功能的实际用途是什么?我如何正确使用它?
谢谢您抽时间见我!
发布于 2012-12-02 22:44:41
根据手册,semop =0是“等待0”操作。所以你的算法应该是有效的。然而,最好使用传统的P和V运算符来解决这些问题,其中P表示semop = -1,V表示semop = +1。因此,如果信号量的初始值为0,则进程A应该执行P运算并阻塞。进程B应该完成其关键部分并执行V操作。一旦进程B执行V操作,进程A的P操作就会完成,它可以继续前进。
https://stackoverflow.com/questions/13670003
复制相似问题