【问题标题】:Synchronization Semaphore同步信号量
【发布时间】:2018-09-25 14:08:00
【问题描述】:
我有一个父进程和三个子进程。父进程有一段代码必须在所有子进程终止后执行。我可以通过 wait() 方法来处理这个问题。它暂停父进程,直到所有子进程都终止。
但是,我必须使用同步信号量来处理这个问题。
有可能吗?
我认为我可以将信号量设置为值 0,然后将那段代码放在减少信号量值的 sem_wait() 函数之后。由于其值等于 0,因此该函数挂起父信号量。之后,当每个子进程完成其工作时,它会调用sem_signal() 方法,将信号量的值加一。这个解决方案有问题:
当三个子进程之一将 syn semaphore 的值加 1 时,父进程可以继续执行其代码,因为它的值不再等于 0。
如何使用信号量让父进程等待所有子进程?
【问题讨论】:
标签:
synchronization
semaphore
【解决方案1】:
我认为这不能用一个信号量来完成。为此目的使用了屏障。您可以尝试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()
在这个概念中,所有进程都应该循环运行。