2014-09-29 28 views
9

Diversi processi accedono alla memoria condivisa, bloccandola con il mutex e pthread_mutex_lock() per la sincronizzazione e ogni processo può essere eliminato in qualsiasi momento (infatti ho descritto php-fpm con l'estensione APC, ma non è importante).
Il mutex verrà sbloccato automaticamente, se il processo ha bloccato il mutex e quindi è stato ucciso?
Oppure c'è un modo per sbloccarlo automaticamente?Will ha ucciso il mutex di processo/rilascio thread?

Modifica: Come risulta, i processi e i thread di morte hanno un comportamento simile in questa situazione, che dipende da robust attribute of mutex.

+4

Dipende dal tipo di mutex utilizzato, che non è stato specificato. Punch [robust mutex] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_setrobust.html) nel tuo motore di ricerca preferito. –

+2

Si prega di vedere [questa domanda correlata] (http://stackoverflow.com/questions/7348465/posix-thread-exit-crash-exception-crash-while-holding-mutex) e come David ha detto di guardare in robusti mutex. Non vengono sbloccati dopo un arresto anomalo, ma il thread successivo che tenterà di bloccarlo riceverà un codice di errore 'EOWNERDEAD'. –

+0

Sarebbe bello dare una risposta, ma il commento di David è probabilmente troppo tetro per essere una risposta così com'è. –

risposta

1

Dipende dal tipo di mutex. Un mutex "robusto" sopravviverà alla morte del thread/processo. Vedere questa domanda: POSIX thread exit/crash/exception-crash while holding mutex

Il filo successivo che tenterà di bloccarla riceverà un codice di errore EOWNERDEAD

Nota: Le informazioni recuperate dai commenti.

Problemi correlati