Also, wenn ich ein Semaphore gesetztsemid
mit num_of_sems
Semaphore und ein sembuf*deleter_searchers_down
Semop: Wenn ein Satz von Semaphoren verkleinert wird, werden alle auf einmal dekrementiert oder blockiert er beim ersten Fehler?
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);
Der Anruf wird versuchen, semop alle Semaphore in der Menge zu senken, auf einmal oder wird es sperren, sobald er versucht, den ersten Semaphor, der 0 ist, zu senken und nach einigen anderen Prozessen diesen bestimmten Semaphor fortzusetzen?
Nun Semaphore tun genau das, was Sie sagen, das heißt, wenn sie gesenkt werden, wenn sie 0 sind, blockieren sie den Prozess. – byrondrossos
Lesen Sie die Frage sorgfältig plz - Willen semop versuchen, alle die Menge zu senken und auf alle Null zu blockieren oder wird es auf der ersten (ersten?) Aufgetreten 0 –
Sie können IPC_NOWAIT angeben, um sofort bei einem Fehler zurückzukehren. Siehe: http://pubs.opengroup.org/onlinepubs/7908799/xsh/semop.html – RedX