首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步信号量

同步信号量
EN

Stack Overflow用户
提问于 2018-04-15 23:37:05
回答 1查看 58关注 0票数 1

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

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

有可能吗?

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2018-04-16 05:40:09

我认为这不是一个信号量就能完成的。障碍物就是用于此目的。您可以尝试使用implement屏障或对程序中的所有特定角色使用信号量。

设置信号量:

代码语言:javascript
复制
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)

父进程:

代码语言:javascript
复制
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()

第一个子进程:

代码语言:javascript
复制
subprocesses_run.wait()

# Some code here

sub1_exit.signal()

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49847073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档