Station MinuitPortail personnel de révision

IFT-2001 — Systèmes d’exploitationAutomne 2026

Semaine 5 — Concurrence

7. Mutex Pthreads

LECTURE 10 / 204 repères · 1 captureSynthèse avec omissions acceptées

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.

Sur le terrain / Capture LinuxS05-MUTEX
Protéger toute la mise à jour. La section critique englobe les trois étapes de la mise à jour.
Protéger toute la mise à jour

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é : 2

Dé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_init initialise un objet avec des attributs ou les valeurs par défaut. PTHREAD_MUTEX_INITIALIZER permet une initialisation statique par défaut.
  • pthread_mutex_lock acquiert ou bloque.
  • pthread_mutex_trylock tente sans attendre et retourne EBUSY si le verrou est indisponible.
  • pthread_mutex_unlock libère; l’ordonnanceur choisit ensuite le prochain acquéreur.
  • pthread_mutex_destroy n’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.

Retour au sommaire de l’unitéHaut de page
Récupérer manuellement les données locales

Copier séparément les données ci-dessous dans des fichiers texte avant de fermer la page ou de modifier le stockage. Une valeur illisible ou incompatible reste en place. Aucun effacement ni rétablissement écrasant n’est effectué automatiquement. L’export/import JSON est disponible sur la page Progression du cours. Cette récupération séparée reste utile pour une valeur brute ou un conflit.

Clé de ce cours : . Format v1 porté par cette clé; dates UTC et identifiants durables.

Si l’accès est refusé, la valeur persistée peut rester inaccessible. Réautoriser le stockage dans le navigateur puis rouvrir ce cours permet de la relire. Une réinitialisation exige une décision explicite après récupération; aucune commande de suppression n’est proposée ici. Les données restent sur cette origine et cet appareil, sans transfert automatique.