2014-09-29 18 views
9

Mehrere Prozesse greifen auf gemeinsam genutzten Speicher zu, sperren ihn mit dem Mutex und pthread_mutex_lock() für die Synchronisation, und jeder Prozess kann jederzeit abgebrochen werden (in der Tat habe ich php-fpm mit APC Erweiterung beschrieben, aber das spielt keine Rolle).
Wird der Mutex automatisch entsperrt, wenn der Prozess den Mutex gesperrt hat und dann getötet wurde?
Oder gibt es eine Möglichkeit, es automatisch zu entsperren?Wird Prozess/Thread-Release-Mutex beendet?

Bearbeiten: Wie sich herausstellt, haben Färbeprozesse und Threads ähnliches Verhalten in dieser Situation, die von robust attribute of mutex abhängt.

+4

Dies hängt vom Typ des verwendeten Mutex ab, den Sie nicht angegeben haben. Lochen Sie [robust mutex] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_setrobust.html) in Ihre bevorzugte Suchmaschine. –

+2

Bitte lesen Sie [diese verwandte Frage] (http://stackoverflow.com/questions/7348465/posix-thread-exit-crash-exception-crash-while-holding-mutex) und wie David sagte in robuste Mutexe zu schauen. Sie werden nach einem Absturz nicht entsperrt, aber der nächste Thread, der versucht, sie zu sperren, wird einen "EOWNERDEAD" -Fehlercode erhalten. –

+0

Es wäre schön, eine Antwort darauf zu geben, aber Davids Kommentar ist wahrscheinlich zu knapp, um eine Antwort zu geben, wie sie ist. –

Antwort

1

Das hängt von der Art des Mutex ab. Ein "robuster" Mutex wird den Tod des Threads/Prozesses überleben. Sehen Sie diese Frage: POSIX thread exit/crash/exception-crash while holding mutex

Der nächste Thread, es zu sperren versuchen, erhalten einen Fehlercode EOWNERDEAD

Hinweis: Gesammelte Informationen aus den Kommentaren.