7. Mutex Pthreads
Un mutex est un verrou binaire spécialisé, généralement associé à une propriété : le thread qui l’acquiert doit le libérer. Cette différence rend un mutex et un sémaphore binaire semblables pour certains patrons, mais non interchangeables dans toutes les conceptions.

Le même compteur est incrémenté deux fois, avec un verrou couvrant la lecture, la modification et l’écriture.
- La section critique englobe les trois étapes de la mise à jour.
- Le résultat vaut 2. Le verrou Python illustre le principe; l’API du cours reste Pthreads.
Lire la capture en texte
with verrou:
local = compteur
compteur = local + 1
Lecture + modification + écriture sous le même verrou.
Deux incréments attendus : 2
Résultat observé : 2Démonstration Station Minuit · Ubuntu 24.04 / WSL2 · Python 3 · 15 octobre 2026 (Toronto). Sortie réelle remise en page et capturée; exemple ajouté, distinct du matériel officiel.
7.1 Cycle de vie
pthread_mutex_initinitialise un objet avec des attributs ou les valeurs par défaut.PTHREAD_MUTEX_INITIALIZERpermet une initialisation statique par défaut.pthread_mutex_lockacquiert ou bloque.pthread_mutex_trylocktente sans attendre et retourneEBUSYsi le verrou est indisponible.pthread_mutex_unlocklibère; l’ordonnanceur choisit ensuite le prochain acquéreur.pthread_mutex_destroyn’est valide que lorsque le mutex n’est plus verrouillé ni utilisé.
Le compteur partagé doit être protégé autour de toute la séquence lire–modifier–écrire, pas seulement autour de l’affectation finale.
7.2 Types de mutex
- NORMAL : une nouvelle acquisition par le propriétaire peut bloquer ou mener à un interblocage.
- RECURSIVE : chaque réacquisition augmente un compteur; autant de déverrouillages sont requis. Ce type peut masquer une structure de programme fragile.
- ERRORCHECK : certains mauvais usages deviennent des codes d’erreur plutôt qu’un blocage ou un comportement indéfini.
Pour un mutex robuste, pthread_mutex_lock peut retourner EOWNERDEAD tout en accordant le verrou : l’état partagé doit alors être réparé et déclaré cohérent avant de poursuivre.
7.3 Mutex adaptatif et priorité
Un mutex adaptatif peut tourner brièvement si son propriétaire s’exécute sur un autre cœur, puis bloquer si l’attente se prolonge. Les protocoles temps réel peuvent également traiter l’inversion de priorité. Le choix dépend donc de la durée probable de la section, du nombre de cœurs et des garanties d’ordonnancement.