Multicœur et synchronisation

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.

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

Autres questions sur Multicœur et synchronisation

  1. Que définit un modèle de cohérence mémoire (memory consistency model) ?
  2. Quelle description de la cohérence séquentielle (sequential consistency) est correcte ?
  3. 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 ?
  4. Quelle est la caractéristique du modèle de cohérence mémoire de x86 (TSO, Total Store Order) ?
  5. Quelle affirmation sur les modèles de cohérence mémoire faibles comme ceux d’ARM ou de RISC-V (RVWMO) est correcte ?

Comparatifs sur ce thème