如果我有多个信号量,如何让进程阻塞直到至少有一个信号量可用?我知道可以使用忙等待循环来实现,例如:
// 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技术,除了信号量,我应该使用哪些?
谢谢。