Multicœur et synchronisation

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.

S'entraîner sur ce thème Retour au thème

Autres questions sur Multicœur et synchronisation

  1. Dans un programme utilisant plusieurs verrous, quelle est la méthode la plus courante pour éviter l’interblocage ?
  2. Que définit un modèle de cohérence mémoire (memory consistency model) ?
  3. Quelle description de la cohérence séquentielle (sequential consistency) est correcte ?
  4. Les deux threads ci-dessus s’exécutent simultanément sur des cœurs différents (sans réordonnancement par le compilateur). Quel résultat est impossible en cohérence séquentielle mais possible sur un CPU réel comme x86 ?
  5. Quelle est la caractéristique du modèle de cohérence mémoire de x86 (TSO, Total Store Order) ?

Comparatifs sur ce thème