In einem Linux-System mit mehreren Prozessen erlauben V-Semaphoren eine Option von SEM_UNDO, die verhindert, dass ein Semaphor "hängenbleibt", wenn ein Prozess mit dem Semaphor abstürzt. Was ist die korrekte Methode, um zu verhindern, dass POSIX-Semaphoren durch einen Absturz in einem Prozess, der den Semaphor hält, blockiert werden? Oder garantiert POSIX , dass der Semaphor im Falle eines Absturzes freigegeben wird?Äquivalent von Sys V SEM_UNDO für Posix-Semaphoren
6
A
Antwort
-1
Sie können den Signalhandler für SIGSEGV verwenden und anschließend den Signalhandler entsperren und entfernen.
// set handler
signal(SIGSEGV, handler);
void handler(int signum) {
// unlock the locked semaphores
signal(SIGSEGV, SIG_DFL);
}
Ist das beantwortet von http://stackoverflow.com/questions/2053679/how-do-i-recover-a-semaphore-when-the-process-that-decremented-it-to-zero- crashe –
Ja und nein. Ich hatte auf eine autoritative Quelle für POSIX-Semaphore gehofft, die die Dinge infolge eines Absturzes in einem unbestimmten Zustand beließ. Diese Verbindung bietet sicherlich eine Möglichkeit, mit einer solchen Situation umzugehen, ohne jedoch das Warum/Wie zu erklären, was aus der POSIX-Spezifikation ein Versehen zu sein scheint. Ich habe am Ende nur SYS-V-Semaphore verwendet, aber ich bin gespannt, warum POSIX das scheinbar einzig sinnvolle Verhalten eines Mutex bei einem Absturz nicht festlegt. – Joe
Nun: http://charette.no-ip.com:81/programming/2010-01-13_PosixSemaphores/ - auch mit der Dateisperrlösung. –