我有一个父进程和三个子进程。父进程有一段代码,必须在所有子进程终止后执行。我可以通过wait()方法来处理这个问题。它挂起父进程,直到所有子进程都终止。
但是,我必须使用同步信号量来处理这个问题。
有可能吗?
我认为我可以将信号量设置为值0,然后将这段代码放在一个sem_wait()函数后面,该函数减少信号量的值。因为它的值等于0,所以函数挂起父信号量。之后,当每个子进程完成其作业时,它将调用sem_signal()方法,该方法将信号量的值递增1。这个解决方案有一个问题:
当三个子进程中的一个子进程将syn信号量的值递增1时,父进程可以继续执行其代码,因为其值不再等于0。
如何使用信号量让父进程等待所有子进程?
发布于 2018-04-16 05:40:09
我认为这不是一个信号量就能完成的。障碍物就是用于此目的。您可以尝试使用implement屏障或对程序中的所有特定角色使用信号量。
设置信号量:
subprocesses_run = Semaphore(3) # means that 3 processes can hold this semaphore
sub1_exit = Semaphore(1) # works like normal mutex
sub2_exit = Semaphore(1)
sub3_exit = Semaphore(1)父进程:
sub1_exit.wait()
sub2_exit.wait()
sub3_exit.wait()
# Do your code
subprocesses_run.signal() # signal for all 3 waiting processes
subprocesses_run.signal()
subprocesses_run.signal()第一个子进程:
subprocesses_run.wait()
# Some code here
sub1_exit.signal()在这个概念中,所有进程都应该在循环中运行。
https://stackoverflow.com/questions/49847073
复制相似问题