Sortie de thread POSIX / crash / exception-crash en maintenant mutex

Existe-t-il un comportement bien défini pour la propriété POSIX mutex en cas de

  1. Sorties de fil
  2. Les accidents de fil
  3. Le fil se bloque à cause d’une exception

Supposons que le thread 1 possède un mutex. Et thread-2 attend d’acquérir le même mutex. Et thread-1 va le scénario 1/2/3. Quel est l’effet sur le thread-2?

PS: Je crois que le comportement de spin-lock consiste à NE PAS débloquer le thread-2, en raisonnant que la section protégée par spin-lock est de toute façon en mauvais état.

Si vous êtes inquiet à propos de ces problèmes, Robust Mutexes est peut-être l’outil que vous recherchez:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_setrobust.html

EOWNERDEAD thread qui possède un mutex robuste se termine sans le déverrouiller, le prochain thread qui tente de le verrouiller obtiendra EOWNERDEAD et en deviendra le nouveau propriétaire. Cela signifie qu’il est responsable de nettoyer l’état que le mutex protège et de le marquer à nouveau comme cohérent avec la fonction pthread_mutex_consistent avant de le déverrouiller. Le déverrouiller sans le marquer comme cohérent place le mutex dans un état irrécupérable en permanence.

Notez qu’avec les mutex robustes, tout le code qui verrouille le mutex doit être conscient de la possibilité que EOWNERDEAD puisse être renvoyé.

C’est vraiment simple. Si vous ne déverrouillez pas explicitement le mutex, il rest verrouillé, peu importe ce qui s’est passé ou pourquoi. C’est c, pas ruby ​​sur rails ou visual basic.