Multicœur et synchronisation

Quel est le rôle d’une instruction de barrière mémoire (fence) ?

  1. AGarantir que les opérations mémoire antérieures à la barrière sont vues des autres cœurs avant celles qui la suivent
  2. BCloisonner physiquement la mémoire et en interdire l’accès
  3. CArrêter l’exécution du programme jusqu’à ce que tous les threads soient arrivés
Afficher la réponse et l'explication

Réponse : A. Garantir que les opérations mémoire antérieures à la barrière sont vues des autres cœurs avant celles qui la suivent

Le CPU pouvant réordonner les opérations mémoire, échanger des données avec d’autres cœurs dans un ordre défini exige une instruction qui empêche ce réordonnancement. La barrière mémoire fait terminer (rendre visibles aux autres cœurs) toutes les lectures et écritures précédentes avant d’effectuer les suivantes. La prise et la libération d’un verrou incluent aussi un effet de barrière, ce qui assure la transmission correcte des variables protégées par le verrou.

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

Autres questions sur Multicœur et synchronisation

  1. 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 ?
  2. Quelle affirmation sur les opérations mémoire à sémantique d’acquisition (acquire) et de libération (release) est correcte ?
  3. En C, pourquoi ajouter seulement volatile à une variable drapeau échangée entre threads est-il insuffisant comme synchronisation ?
  4. Pourquoi _Atomic de C11 et std::atomic de C++11 permettent-ils de spécifier un ordre mémoire ?
  5. Quelle comparaison entre le « verrouillage à gros grain », qui protège toute une grande structure de données par un seul verrou, et le « verrouillage à grain fin », qui protège chaque partie par un verrou distinct, est correcte ?

Comparatifs sur ce thème