Multicœur et synchronisation
En C, pourquoi ajouter seulement volatile à une variable drapeau échangée entre threads est-il insuffisant comme synchronisation ?
- AParce qu’une variable volatile ne peut plus être lue par les autres threads
- BParce que volatile ne fait que restreindre les optimisations du compilateur, sans garantir l’indivisibilité des opérations ni l’ordre de visibilité pour les autres cœurs
- CParce qu’avec volatile, la variable est enregistrée sur disque et devient lente
Afficher la réponse et l'explication
Réponse : B. Parce que volatile ne fait que restreindre les optimisations du compilateur, sans garantir l’indivisibilité des opérations ni l’ordre de visibilité pour les autres cœurs
volatile indique au compilateur de ne pas supprimer ni regrouper les lectures et écritures de la variable ; il était à l’origine destiné à la manipulation des registres matériels. Il n’empêche pas le CPU de réordonner les opérations mémoire et ne rend pas indivisibles des opérations comme counter++. Depuis C11 et C++11, _Atomic et std::atomic garantissent à la fois l’indivisibilité et l’ordre mémoire.
Continuer : 9 autres questions sur Multicœur et synchronisation