【发布时间】:2011-12-08 12:10:28
【问题描述】:
如果我有多个信号量,在至少一个信号量空闲之前,我如何才能让进程阻塞?我知道我可以通过忙等待循环来做到这一点,例如:
// blocks until one of the semaphores in sems is free, returns
// index of semaphore that was available
int multiple_sem_wait(sem_t **sems, int num_sems) {
while (true) {
for (int i = 0; i < num_sems; ++i) {
if (sem_trywait(sems[i]) == 0) {
return i;
}
}
}
}
但是有没有办法在没有繁忙循环的情况下做到这一点?也许我应该使用信号量以外的其他 IPC 技术?
谢谢
【问题讨论】:
-
不使用信号量,使用条件变量怎么样?