Multicœur et synchronisation

Quelle description de la course aux données (data race) est correcte ?

  1. APlusieurs threads lisent seulement la même variable simultanément
  2. BUn thread écrit deux fois de suite dans la même variable
  3. CPlusieurs threads accèdent simultanément à la même variable sans synchronisation, l’un au moins en écriture
Afficher la réponse et l'explication

Réponse : C. Plusieurs threads accèdent simultanément à la même variable sans synchronisation, l’un au moins en écriture

Une course aux données est une situation où l’ordre des lectures et écritures sur un même emplacement n’est pas fixé par une synchronisation, si bien que le résultat dépend de l’ordre d’exécution. Elle se manifeste ou non selon la temporisation, ce qui en fait un défaut difficile à détecter par les tests. En C et C++, le comportement d’un programme comportant une course aux données est indéfini. Il faut fixer l’ordre par des verrous ou des variables atomiques.

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

Autres questions sur Multicœur et synchronisation

  1. Si le code ci-dessus est exécuté simultanément par deux threads, la valeur finale de counter peut être inférieure à 200000. Pour quelle raison ?
  2. Quelle description d’une instruction atomique (instruction indivisible) est correcte ?
  3. Quel est le fonctionnement de l’instruction atomique CAS (compare-and-swap) ?
  4. Le code ci-dessus double la variable partagée counter au moyen de CAS(&p, valeur attendue, nouvelle valeur). Dans quel cas le CAS échoue-t-il et la boucle recommence-t-elle ?
  5. Avec une paire d’instructions comme LR/SC (load-reserved/store-conditional) de RISC-V, dans quel cas le SC (store-conditional) échoue-t-il ?

Comparatifs sur ce thème