Aller au contenu

Numérique et sciences informatiques (spécialité) · TerminaleBac

Interblocage (deadlock) : cours de Terminale NSI

Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur

L'essentiel

  • Un interblocage (deadlock, étreinte fatale) survient en programmation concurrente quand des processus s'attendent mutuellement ; ils restent bloqués définitivement.2
  • Cas typique : deux processus légers acquièrent deux mutex M1 et M2 dans un ordre différent, chacun attend alors celui que l'autre détient.2
  • Pour en sortir, il faut arrêter l'un des processus fautifs ; mieux vaut l'éviter en amont.1
  • Le système peut refuser une allocation qui mènerait à un état non sûr ; l'algorithme du banquier le fait mais exige de connaître les plafonds de consommation à l'avance.2
  • Un état non sûr n'est pas encore un interblocage : il indique seulement que le risque existe.2

Une situation où plus rien n'avance

Tu as déjà vu un ordinateur ou un programme qui se fige sans jamais se débloquer, même en attendant longtemps ? Parfois, la cause est un simple calcul très long. Mais dans d'autres cas, le programme est dans une impasse logique : chaque partie attend une autre partie, qui attend elle-même la première. Cette impasse porte un nom : l'interblocage.

Ce chapitre s'appuie sur ce que tu as vu juste avant : un système d'exploitation gère plusieurs processus en même temps, se partage le processeur grâce à l'ordonnancement, et fait cohabiter des programmes qui utilisent les mêmes ressources (fichiers, mémoire, périphériques, verrous). Dès que des processus se partagent des ressources, une question apparaît : que se passe-t-il quand chacun garde une ressource et en réclame une autre ?

Le mot « concurrente » est important : l'interblocage n'existe que si plusieurs processus (ou plusieurs processus légers, les threads) avancent en parallèle ou en alternance et se partagent des ressources. Un programme séquentiel simple, qui exécute ses instructions les unes après les autres sans rien partager, ne peut pas se bloquer de cette façon.

Imagine deux voitures face à face sur un chemin étroit où une seule peut passer. Chaque conducteur attend que l'autre recule. Personne ne recule, donc personne n'avance. Aucun des deux n'est en panne, aucun n'est lent : ils sont simplement chacun en attente de l'autre. C'est exactement l'idée de l'interblocage, avec des processus à la place des voitures et des ressources à la place du chemin.

Un exemple concret avec deux mutex

Un exemple classique d'interblocage se produit quand deux processus légers essaient d'acquérir deux mutex dans un ordre différent.2 Prenons deux mutex, M1 et M2, et deux processus légers, P1 et P2. Voici une séquence d'opérations possible, que nous construisons pour l'étude :

Dans une telle situation, les deux processus légers sont définitivement bloqués.2 Le mot « définitivement » signifie que le temps ne règle rien : tu peux attendre une seconde, une heure ou un jour, la situation reste identique.

Séquence menant à l'interblocage
ÉtapeP1P2
1acquiert M1—
2—acquiert M2
3demande M2 : attend—
4—demande M1 : attend
Séquence menant à l'interblocage · Après l'étape 4, chaque processus attend le mutex détenu par l'autre.

Voici une traduction possible du scénario avec le module threading. Les pauses courtes (sleep) servent seulement à faire en sorte que les deux fils prennent leur premier verrou avant de demander le second.

import threading, time

m1 = threading.Lock()
m2 = threading.Lock()

def p1():
    with m1:
        time.sleep(0.1)
        with m2:          # P1 attend M2
            print("P1 a fini")

def p2():
    with m2:
        time.sleep(0.1)
        with m1:          # P2 attend M1
            print("P2 a fini")

t1 = threading.Thread(target=p1)
t2 = threading.Thread(target=p2)
t1.start(); t2.start()
t1.join(); t2.join()   # ne se termine jamais

Si tu exécutes ce programme, aucun des deux messages ne s'affiche et le programme ne rend jamais la main.

Pourquoi l'interblocage est grave

Un interblocage n'est pas un simple ralentissement. Les processus pris dans cet état n'en sortent jamais, ce qui en fait une situation catastrophique.2 Concrètement :

  • les ressources détenues par les processus bloqués ne sont jamais rendues, donc d'autres processus qui en auraient besoin risquent de se bloquer à leur tour ;
  • le travail attendu (une sauvegarde, une transaction, un affichage) n'est jamais terminé ;
  • le programme ne produit aucune erreur : il attend, c'est tout, ce qui complique le diagnostic.

L'interblocage ne demande pas forcément deux acteurs : un processus peut aussi s'attendre lui-même.2 Imagine un fil d'exécution qui prend un verrou simple (non réentrant), puis, dans une fonction appelée plus loin, demande à nouveau ce même verrou. Le verrou est déjà détenu, par lui-même, et il ne sera libéré qu'une fois la fonction terminée. Le fil attend donc un événement qu'il est seul à pouvoir provoquer.

import threading

verrou = threading.Lock()

def sous_tache():
    with verrou:        # demande un verrou déjà pris
        print("jamais affiché")

with verrou:
    sous_tache()

Sortir d'un interblocage, ou l'éviter

Que faire quand l'interblocage est là ? Et mieux, comment l'empêcher d'arriver ? Il existe deux familles de solutions : mettre fin à un interblocage existant, ou l'éviter. Pour mettre fin à un interblocage, il faut stopper l'un des deux processus responsables.1 Une fois ce processus arrêté, les ressources qu'il détenait sont libérées, et l'autre processus peut enfin continuer.

Pour éviter un interblocage, le système doit disposer de renseignements sur les besoins des processus avant de leur distribuer des ressources.2 Le principe : à chaque demande, il vérifie si l'accorder le conduirait vers un état « non sûr », c'est-à-dire une situation d'où un interblocage pourrait naître.2 Dans ce cas, il peut retarder la demande au lieu de l'accorder tout de suite.

L'algorithme du banquier est un algorithme classique qui permet d'anticiper les interblocages. Pour fonctionner, il lui faut connaître d'avance le plafond de consommation de chaque ressource.2 Son nom vient d'une image : un banquier n'accorde un prêt que s'il est sûr de pouvoir encore satisfaire les besoins de ses clients ensuite. Ici, le système n'accorde une ressource que s'il reste capable de répondre aux demandes maximales annoncées des processus.

Sur l'exemple des deux mutex, on peut raisonner directement. Si P1 et P2 demandent tous deux M1 d'abord, puis M2, alors celui qui obtient M1 en premier peut ensuite demander M2 : l'autre, qui attend M1, ne détient rien et ne bloque donc personne. La boucle d'attente ne peut plus se former. Convenir d'un même ordre d'acquisition pour les verrous est donc une bonne habitude de programmation. Ce raisonnement se vérifie sur la séquence de la section précédente : l'étape 2 (P2 prend M2 avant M1) disparaît.

État non sûr n'est pas interblocage

Il faut distinguer deux notions voisines. Un système peut se trouver dans un état non sûr sans qu'un interblocage en résulte forcément.2 Les mots « sûr » et « non sûr » décrivent seulement la possibilité d'un interblocage, pas sa réalisation.2

Notion Ce que cela signifie Les processus peuvent-ils encore avancer ?
État sûr Aucun risque d'interblocage dans la situation considérée Oui
État non sûr Un interblocage est possible, pas certain Oui, tant que l'attente circulaire ne s'est pas formée
Interblocage Les processus s'attendent mutuellement et restent bloqués Non, définitivement2

Reconnaître et analyser un interblocage

Le phénomène dépasse les processus. Un exemple pédagogique en base de données reprend l'idée avec des élèves : deux établissements A et B, et deux élèves de terminale X et Y. L'interblocage se voit entre X et Y, qui souhaitent échanger mais ne peuvent pas le faire sans que l'un des deux refuse la seule réponse positive qu'il a reçue.1 La structure est la même : chacun attend que l'autre renonce en premier, donc personne ne bouge.

Exercices corrigés

Exercice 1 Suivre un scénario à deux verrous

★☆☆Environ 8 min

Deux processus légers P1 et P2 partagent deux mutex V et W, tous deux libres au départ. Les opérations se déroulent dans cet ordre :

  1. P1 acquiert V.
  2. P2 acquiert W.
  3. P2 demande V.
  4. P1 demande W.

À la fin de l'étape 4, y a-t-il interblocage ? Justifie en indiquant qui détient quoi et qui attend quoi.

Indice 1

Après chaque étape, note le détenteur de V et celui de W.

Indice 2

Une demande sur un mutex déjà détenu par un autre met le processus en attente.

Voir la correction pas à pas
  1. Après l'étape 1 : P1 détient V, W est libre.

  2. Après l'étape 2 : P1 détient V, P2 détient W.

  3. Étape 3 : P2 demande V, qui est détenu par P1, donc P2 attend P1.

  4. Étape 4 : P1 demande W, qui est détenu par P2, donc P1 attend P2.

  5. Les deux processus s'attendent : P1 attend P2 et P2 attend P1. C'est une attente circulaire, donc un interblocage.

Il y a interblocage : P1 et P2 sont bloqués définitivement, chacun attendant le mutex détenu par l'autre. La cause est l'ordre d'acquisition inversé (V puis W pour P1, W puis V pour P2).

Exercice 2 Corriger un programme

★★☆Environ 10 min

Reprends les deux processus de l'exercice précédent : chacun a besoin des deux mutex V et W pour travailler.

  1. Propose une modification de l'ordre d'acquisition qui supprime le risque d'interblocage.
  2. Explique pourquoi la boucle d'attente ne peut plus se former.
Indice 1

Que se passerait-il si les deux processus demandaient d'abord le même mutex ?

Indice 2

Regarde ce que fait le second processus quand le premier a déjà pris le mutex commun.

Voir la correction pas à pas
  1. Choisir un ordre commun : les deux processus demandent d'abord V, puis W.

  2. Cas 1 : P1 prend V en premier. P2 demande V, le trouve occupé et attend, sans rien détenir. P1 prend W, travaille, puis libère W et V.

  3. P2 obtient alors V puis W et termine à son tour.

  4. Cas 2 : P2 prend V en premier : le raisonnement est symétrique.

  5. Le processus qui attend ne détient aucune ressource demandée par l'autre : aucune attente circulaire n'est possible.

Avec un ordre d'acquisition identique pour tous les processus, celui qui arrive second attend sans bloquer l'autre. L'un des deux finit toujours par passer, puis libère les ressources.

Exercice 3 Trois processus en cercle

★★★Environ 12 min

Trois processus A, B, C et trois ressources R1, R2, R3, chacune utilisable par un seul processus à la fois. À un instant donné : A détient R1 et demande R2 ; B détient R2 et demande R3 ; C détient R3 et ne demande rien.

  1. Y a-t-il interblocage ?
  2. Même question si C demande maintenant R1.
  3. Dans ce second cas, que peut-on faire pour débloquer la situation ?
Indice 1

Suis la chaîne des attentes en partant de A.

Indice 2

Pour la question 3, souviens-toi de ce qui libère des ressources.

Voir la correction pas à pas
  1. Cas 1 : A attend B, B attend C. C ne demande rien, donc il peut terminer et libérer R3.

  2. B obtient R3, termine et libère R2 et R3, puis A obtient R2 et termine : pas d'interblocage.

  3. Cas 2 : C demande R1, détenu par A. On a A attend B, B attend C, C attend A : boucle fermée, interblocage.

  4. Pour débloquer : arrêter l'un des processus de la boucle, par exemple C. Ses ressources (R3) sont libérées.

  5. B obtient alors R3 et peut terminer, ce qui libère R2 pour A.

Dans le premier cas, la chaîne d'attente s'arrête sur un processus qui ne demande rien : pas d'interblocage. Dans le second, la chaîne se referme sur elle-même : il y a interblocage, que l'on résout en arrêtant un des processus.

Quiz

7 questions · correction immédiate · ton score reste sur ton appareil.

  1. Qu'est-ce qu'un interblocage ?

  2. Deux processus légers acquièrent deux mutex M1 et M2 dans un ordre différent. Quel risque courent-ils ?

  3. Un processus ne peut être en interblocage qu'avec un autre processus.

  4. Comment peut-on mettre fin à un interblocage existant ?

  5. Que fait le système pour éviter un interblocage lors d'une allocation de ressource ?

  6. Un état non sûr est toujours un interblocage.

  7. Quelle condition est nécessaire pour utiliser l'algorithme du banquier ?

Les questions qu'on se pose

À quoi sert-il d'étudier l'interblocage ?

Dès que des programmes partagent des ressources, le risque existe. Comprendre le phénomène permet de reconnaître une situation de blocage, d'en expliquer la cause et de choisir une parade. Les processus bloqués le sont définitivement, ce qui rend la situation catastrophique : mieux vaut donc savoir la prévenir.2

Comment savoir si un programme est lent ou en interblocage ?

Un programme lent finit par avancer. Dans un interblocage, les processus restent bloqués définitivement.2 Pour trancher, écris la séquence des acquisitions et cherche une boucle d'attente : P1 attend P2 et P2 attend P1, éventuellement via d'autres processus.

Peut-on toujours éviter les interblocages ?

Non. L'évitement demande des informations préalables, comme les plafonds de consommation des ressources pour l'algorithme du banquier.2 Or, dans de nombreux systèmes, on ne peut pas prévoir les demandes des processus : l'évitement est donc souvent irréalisable.2 On peut alors mettre fin à un interblocage en arrêtant un des processus fautifs.1

Quelle est la différence entre un état non sûr et un interblocage ?

Un état non sûr indique qu'un interblocage est possible. L'interblocage, lui, est déjà là : les processus s'attendent. Un système peut être dans un état non sûr sans être en interblocage, par exemple si un processus libère une ressource et rompt l'attente circulaire.2

Que faut-il savoir faire à l'examen sur ce sujet ?

L'attendu est de repérer un interblocage dans un scénario (qui détient quoi, qui attend quoi), de l'expliquer avec le vocabulaire juste (processus, ressource, attente mutuelle) et de proposer une issue. Applique la méthode d'analyse : écris la séquence étape par étape, puis cherche la boucle d'attente.

Sources

  1. Notion d'interblocage [Spécialité NSI - Année 2024-2025], Académie de Lyon. Consulté le 7 novembre 2026.
  2. Interblocage, Wikipédia. Consulté le 7 novembre 2026.

Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2 Bientôt
  • CM1 Bientôt
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page