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.
| Étape | P1 | P2 |
|---|---|---|
| 1 | acquiert M1 | — |
| 2 | — | acquiert M2 |
| 3 | demande M2 : attend | — |
| 4 | — | demande M1 : attend |
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
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 :
- P1 acquiert V.
- P2 acquiert W.
- P2 demande V.
- 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
Après l'étape 1 : P1 détient V, W est libre.
Après l'étape 2 : P1 détient V, P2 détient W.
Étape 3 : P2 demande V, qui est détenu par P1, donc P2 attend P1.
Étape 4 : P1 demande W, qui est détenu par P2, donc P1 attend P2.
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
Reprends les deux processus de l'exercice précédent : chacun a besoin des deux mutex V et W pour travailler.
- Propose une modification de l'ordre d'acquisition qui supprime le risque d'interblocage.
- 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
Choisir un ordre commun : les deux processus demandent d'abord V, puis W.
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.
P2 obtient alors V puis W et termine à son tour.
Cas 2 : P2 prend V en premier : le raisonnement est symétrique.
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
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.
- Y a-t-il interblocage ?
- Même question si C demande maintenant R1.
- 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
Cas 1 : A attend B, B attend C. C ne demande rien, donc il peut terminer et libérer R3.
B obtient R3, termine et libère R2 et R3, puis A obtient R2 et termine : pas d'interblocage.
Cas 2 : C demande R1, détenu par A. On a A attend B, B attend C, C attend A : boucle fermée, interblocage.
Pour débloquer : arrêter l'un des processus de la boucle, par exemple C. Ses ressources (R3) sont libérées.
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.
-
Un interblocage survient lorsque des processus concurrents s'attendent mutuellement.2 Un programme lent finit par avancer, ce qui n'est pas le cas ici : les processus bloqués le sont définitivement. Une erreur de syntaxe est détectée avant l'exécution et n'a aucun rapport.
-
Prendre les mutex dans un ordre différent est un cas classique d'interblocage.2 Le mutex protège une ressource, mais ne garantit pas l'absence de blocage : c'est la manière de les combiner qui crée le risque.
-
Faux : un processus peut aussi s'attendre lui-même.2 Par exemple, s'il redemande un verrou non réentrant qu'il détient déjà. Penser qu'il faut toujours deux acteurs est l'erreur tentante.
-
À chaque allocation, le système contrôle si elle l'amènerait vers un état non sûr, c'est-à-dire une situation d'où un interblocage pourrait naître.2 Supprimer les ressources partagées ou n'exécuter qu'un processus à la fois ne correspond pas au principe décrit, et ignorer la demande créerait justement une attente sans fin.
-
Faux : un système peut être dans un état non sûr sans qu'un interblocage en résulte forcément.2 L'état non sûr exprime une possibilité, pas un fait. Confondre les deux est l'erreur tentante.
-
L'algorithme du banquier exige de savoir d'avance jusqu'où chaque processus peut consommer chaque ressource.2 Cette exigence explique pourquoi l'évitement est souvent irréalisable quand les demandes sont imprévisibles. Le nombre de processeurs, l'absence de mutex ou un minimum de trois processus n'ont aucun rapport avec cette condition.
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
- Notion d'interblocage [Spécialité NSI - Année 2024-2025], Académie de Lyon. Consulté le 7 novembre 2026.
- 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.