我将共享变量设置为0,然后派生N个进程。这些进程然后忙于等待共享变量变为1。父进程负责将此变量设置为1。在这里,消除忙碌等待的最佳选择是什么?
我一直在研究信号量(sem_open等),但我的理解是父母将需要sem_post N次,以便所有印刷都能进行。
答案 0 :(得分:2)
一种方法是在父进程中创建管道。每个子进程都会关闭管道的写入端,然后调用read
(该块将阻塞)。当父进程准备就绪时,它将关闭其管道的两端。这使得所有子项都从read
返回,现在他们可以关闭管道的读取端并继续执行代码。
答案 1 :(得分:0)
在这种情况下,有时会使用atomic操作。您可以使用原子标志来通知子流程,但是会创建繁忙等待。因此,您可以在非常特殊的情况下使用它。
其他方法是使用pthread_cond_broadcast()
和pthread_cond_timedwait()
之类的事件来创建事件。所有子流程都在等待您的条件。准备好出发时,请在父进程上将其解锁。