【发布时间】:2017-09-21 22:47:06
【问题描述】:
我正在尝试实现一个等待 N 个进程继续的聚集函数。
struct sembuf operations[2];
operaciones[0].sem_num = 0;
operaciones[0].sem_op = -1; // wait() or p()
operaciones[1].sem_num = 0;
operaciones[1].sem_op = 0; // wait until it becomes 0
semop ( this->id,operations,2 );
最初,信号量的值为N。
问题是即使所有进程都执行了 semop 函数,它也会冻结。我认为这与操作是原子执行的事实有关(但我不知道它到底是什么意思)。但我不明白为什么它不起作用。
代码是否从信号量中减去 1,然后如果它不是最后一个进程,或者代码应该以不同的方式运行,是否会阻止进程?
【问题讨论】:
标签: c++ c unix semaphore barrier