Если у меня более одного семафора, как я могу иметь блок процесса до тех пор, пока не появится хотя бы один из семафоров это бесплатно? Я знаю, что могу сделать это с помощью цикла "занято-ожидание", например:
// 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, отличный от семафоров?
Спасибо