Multicœur et synchronisation

Pourquoi _Atomic de C11 et std::atomic de C++11 permettent-ils de spécifier un ordre mémoire ?

  1. APour indiquer où placer la variable atomique en mémoire
  2. BParce qu’en ne choisissant que les garanties d’ordre nécessaires, on évite les barrières inutiles et préserve les performances
  3. CPour fixer à l’avance l’ordre d’exécution des threads
Afficher la réponse et l'explication

Réponse : B. Parce qu’en ne choisissant que les garanties d’ordre nécessaires, on évite les barrières inutiles et préserve les performances

Par défaut, les opérations sur variables atomiques sont en cohérence séquentielle (memory_order_seq_cst), la plus intuitive mais au coût de barrières plus lourd. Un simple compteur n’a besoin que d’indivisibilité, d’où relaxed ; un drapeau de transmission de données se contente d’acquire et release. Le compilateur génère selon la spécification les instructions minimales nécessaires au modèle mémoire du CPU.

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

Autres questions sur Multicœur et synchronisation

  1. 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 ?
  2. Quelle propriété caractérise un algorithme sans verrou (lock-free) ?
  3. Quelle description de la section critique est correcte ?
  4. Quelle description de la synchronisation par barrière utilisée dans les programmes parallèles est correcte ?
  5. Si 64 cœurs mettent à jour en continu et simultanément un compteur partagé unique par instruction atomique, l’ajout de cœurs n’accélère pas le traitement. Quelle en est la raison principale ?

Comparatifs sur ce thème