如果我有多個信號量,那麼在至少有一個信號量空閒之前如何獲得進程塊?我知道我可以如用忙等待循環做到這一點:等待多個信號而無需等待(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技術?
感謝
而不是使用信號量,如何使用條件變量? –