Así que si yo he puesto un semáforo semid
con num_of_sems
semáforos y una sembuf*deleter_searchers_down
Semop: ¿Al disminuir un conjunto de semáforos se disminuyen todos a la vez o se bloquea en la primera falla?
struct sembuf *deleter_searchers_down
= malloc(sizeof (*deleter_searchers_down) * num_of_sems);
for (i = 0; i < num_of_sems; ++i) {
(deleter_searchers_down + i)->sem_op = -1;
(deleter_searchers_down + i)->sem_num = i;
(deleter_searchers_down + i)->sem_flg = SEM_UNDO;
}
semop(semid, deleter_searchers_down, num_of_sems);
La llamada a la llamada al sistema intentará bajar todos los semáforos en el conjunto de una sola vez o va a bloquear una vez que se intenta para bajar el primer semáforo que es 0 y continuar después de algunos otros procesos de ese semáforo en particular?
Los semáforos hacen exactamente lo que usted dice, es decir, cuando se bajan, si son 0, bloquean el proceso. – byrondrossos
Lea la pregunta con cuidado, por favor: semop intentará bajar todo el conjunto y bloquear en todos los cero o se bloqueará en el primero (¿primero?) Encontrado 0 –
Puede especificar que IPC_NOWAIT regrese inmediatamente en caso de falla. Ver: http: //pubs.opengroup.org/onlinepubs/7908799/xsh/semop.html – RedX