2010-12-12 74 views

Répondre

14

non. Le mutex reste enfermé. Qu'est-ce qui se passe réellement à un tel verrouillage dépend de son type, vous pouvez lire à ce sujet here ou here

+0

Merci Beaucoup !!! Merci beaucoup !!! – Sadish

+0

Un autre thread ne peut pas le déverrouiller sauf s'il s'agit d'un mutex robuste. –

+0

Whoa, un 'mutex' qui n'a pas d'affinité avec le fil? Aucun statut d'erreur "abandonné"? –

10

Si vous avez créé un mutex robuste en mettant en place les bons attributs avant d'appeler pthread_mutex_init, le mutex entrera dans un état particulier lorsque le thread qui contient le verrou se termine, et le thread suivant pour tenter d'acquérir le mutex obtiendra une erreur de EOWNERDEAD. Il est alors chargé de nettoyer l'état protégé par le mutex et d'appeler le pthread_mutex_consistent pour rendre le mutex utilisable à nouveau, ou d'appeler le pthread_mutex_unlock (ce qui rendra le mutex inutilisable en permanence, d'autres tentatives pour l'utiliser renverront ENOTRECOVERABLE).

Pour les mutex non robustes, le mutex est définitivement inutilisable si le thread qui le bloque se termine sans le déverrouiller. Selon la norme (voir la résolution à issue 755 sur le tracker Austin Group), le mutex reste verrouillé et sa propriété formelle continue d'appartenir au thread qui a quitté, et tout thread qui tente de le verrouiller sera bloqué. Si un autre thread tente de le déverrouiller, c'est normalement un comportement indéfini, sauf si le mutex a été créé avec l'attribut PTHREAD_MUTEX_ERRORCHECK, auquel cas une erreur sera renvoyée. D'autre part, de nombreuses implémentations (la plupart?) Du monde réel ne respectent pas les exigences de la norme. Une tentative de verrouillage ou de déverrouillage du mutex d'un autre thread peut réussir, car l'identifiant du thread (utilisé pour suivre la propriété) a pu être réutilisé et peut maintenant faire référence à un thread différent (probablement celui qui fait la nouvelle demande de verrouillage/déverrouillage). Au moins, NPTL de glibc est connu pour présenter ce comportement.