Multicœur et synchronisation

Quelle est la caractéristique du modèle de cohérence mémoire de x86 (TSO, Total Store Order) ?

  1. AC’est le modèle le plus faible, qui autorise tous les réordonnancements de lectures et écritures
  2. BC’est la cohérence séquentielle elle-même, qui n’autorise aucun réordonnancement
  3. CC’est un modèle relativement fort, qui autorise uniquement qu’une lecture d’une autre adresse suivant une écriture soit vue avant celle-ci
Afficher la réponse et l'explication

Réponse : C. C’est un modèle relativement fort, qui autorise uniquement qu’une lecture d’une autre adresse suivant une écriture soit vue avant celle-ci

En TSO, l’ordre entre écritures, l’ordre entre lectures et l’ordre d’une écriture suivant une lecture sont préservés ; seule une lecture d’une autre adresse suivant une écriture peut la devancer. Ce modèle traduit directement l’existence du tampon d’écriture. Dans ce cadre, la plupart des programmes se comportent de façon intuitive, si bien que les barrières sont relativement rarement nécessaires sur x86.

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

Autres questions sur Multicœur et synchronisation

  1. Quelle affirmation sur les modèles de cohérence mémoire faibles comme ceux d’ARM ou de RISC-V (RVWMO) est correcte ?
  2. Quel est le rôle d’une instruction de barrière mémoire (fence) ?
  3. Dans le code ci-dessus, le thread 1 prépare data puis le signale via flag, et le thread 2 lit data après avoir vu flag. Sur un CPU à modèle de cohérence faible, que faut-il pour que le thread 2 lise de façon certaine 42 ?
  4. Quelle affirmation sur les opérations mémoire à sémantique d’acquisition (acquire) et de libération (release) est correcte ?
  5. En C, pourquoi ajouter seulement volatile à une variable drapeau échangée entre threads est-il insuffisant comme synchronisation ?

Comparatifs sur ce thème