Che certamente dipende (almeno) due cose:
- Come viene implementato il mutex, e
- Come si blocca il filo (vuol generano un'eccezione, o lo fa solo "scompaiono") .
Per esempio, in synchronized
blocchi di Java sono garantiti per essere rilasciato quando il "filo è fatto con l'oggetto" - qualunque cosa significhi (vedi link). Secondo this articolo:
L'interruzione di un thread provoca il blocco di tutti i monitor che ha bloccato.
Ok, stop()
ing i rilasci filo i monitor, ma cosa succede se un filo scompare in qualche modo, è poi "fatto con l'oggetto"? Non vedo questo documentato da nessuna parte. Ma è ovvio che qualcuno deve rilasciare mutex bloccati o altrimenti si bloccherà; forse alcuni mutex o ambienti includono meccanismi che rilasciano mutex automaticamente se il thread, che li ha bloccati, diventa inesistente.
Un altro esempio: java.util.concurrent.Lock documenti consiglia di utilizzare una dichiarazione finally
per rilasciare il blocco in modo che qualsiasi cosa accada con il thread in esecuzione, il blocco venga rilasciato. Ma, se il thread scompare prima che venga eseguita l'istruzione finally
, il blocco non viene mai rilasciato e si verifica effettivamente un deadlock. Ovviamente, i thread non dovrebbero "scomparire" proprio così.
Una bella domanda!
fonte
2010-07-02 07:41:27
Si prega di fornire ulteriori informazioni. – InsertNickHere