如果我有多个信号量,那么在至少有一个信号量空闲之前如何获得进程块?我知道我可以如用忙等待循环做到这一点:等待多个信号而无需等待(C/C++ Linux)
// 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技术?
感谢
而不是使用信号量,如何使用条件变量? –