Ожидание нескольких семафоров без ожидания занятости (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, отличный от семафоров?

Спасибо

5
задан Switch 15 October 2011 в 21:27
поделиться