同步信号量

时间:2018-04-15 15:37:05

标签: synchronization semaphore

我有一个父进程和三个子进程。父进程有一段代码,必须在所有子进程终止后执行。我可以通过wait()方法来处理这个问题。它会挂起父进程,直到所有子进程终止。

但是,我必须通过使用同步信号量来处理这个问题。

有可能吗?

我认为我可以将信号量设置为值0,并且该段代码放在sem_wait()函数之后,这会降低信号量值。由于其值等于0,因此函数将挂起父信号量。之后,当每个子进程完成其作业时,它会调用sem_signal()方法,该方法将信号量的值递增1。这个解决方案有一个问题:

当三个子进程之一将syn信号量的值递增1时,父进程可以继续执行其代码,因为它的值不再等于0。

如何通过使用信号量使父进程等待所有子进程?

1 个答案:

答案 0 :(得分:0)

我认为这不能用一个信号量来完成。障碍用于此目的。您可以尝试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()

在这个概念中,所有进程都应该循环运行。