Qu'est-ce que Interblocage (deadlock) ?

État où plusieurs threads détiennent chacun une ressource tout en attendant celle d'un autre, si bien qu'aucun ne peut avancer. On l'évite en fixant globalement l'ordre d'acquisition des verrous.

Nom japonais: デッドロック

« Interblocage (deadlock) » apparaît dans 3 questions d'entraînement réparties sur 2 thèmes, dont Multicœur et synchronisation, Système d'exploitation et matériel.

Domaine: Multicœur et synchronisation

S'entraîner : questions sur Interblocage (deadlock)

Quel est un exemple d’interblocage (deadlock) ?

  1. ALe thread 1 détient le verrou A et attend le verrou B, tandis que le thread 2 détient le verrou B et attend le verrou A
  2. BDeux threads modifient la même variable sans synchronisation et la valeur est corrompue
  3. CUn thread prend un verrou et le libère aussitôt
Afficher la réponse et l'explication

Réponse : A. Le thread 1 détient le verrou A et attend le verrou B, tandis que le thread 2 détient le verrou B et attend le verrou A

L’interblocage est une situation où plusieurs threads, conservant chacun des ressources, attendent les ressources détenues par les autres, si bien qu’aucun ne peut progresser. Dans l’exemple, le thread 1 attend la libération de B et le thread 2 celle de A, mais aucun ne lâche son propre verrou ; ils restent bloqués indéfiniment. Comme ils s’arrêtent sans consommer de CPU, le traitement paraît figé vu de l’extérieur.

Dans un programme utilisant plusieurs verrous, quelle est la méthode la plus courante pour éviter l’interblocage ?

  1. AFixer un ordre unique de prise des verrous, respecté par tous les threads dans tout le programme
  2. BNe jamais libérer un verrou une fois pris
  3. CLimiter le nombre de threads à deux au plus
Afficher la réponse et l'explication

Réponse : A. Fixer un ordre unique de prise des verrous, respecté par tous les threads dans tout le programme

L’interblocage survient lorsqu’un « cycle » se forme, chaque thread attendant le verrou détenu par un autre. Si tous respectent par exemple la règle « toujours prendre A avant B », aucun thread ne détient B en attendant A, et aucun cycle ne se forme. Il existe d’autres méthodes : prendre d’un coup tous les verrous nécessaires, ou relâcher les verrous détenus et recommencer en cas d’échec.

« Interblocage (deadlock) » dans les explications

Questions mentionnant « Interblocage (deadlock) » (3)

  1. Quel est un exemple d’interblocage (deadlock) ?
  2. Dans un programme utilisant plusieurs verrous, quelle est la méthode la plus courante pour éviter l’interblocage ?
  3. Comment s’appelle l’état où, faute de mémoire physique suffisante, le système ne fait plus qu’évincer et charger des pages et où le traitement ne progresse presque plus ?

Comparatifs incluant ce terme

Termes associés

Écroulement (thrashing) Acquisition-libération (acquire-release) Barrière mémoire Cohérence séquentielle Compare-and-swap Course aux données (data race) Espionnage de bus (snooping) Faux partage (false sharing) Instruction atomique LR/SC

Retour au glossaire