Qu'est-ce que Course aux données (data race) ?

Situation où plusieurs threads accèdent simultanément et sans synchronisation à une même variable, au moins un accès étant une écriture. Le résultat varie d'une exécution à l'autre ; en C et C++, le comportement est indéfini.

Nom japonais: データ競合

« Course aux données (data race) » apparaît dans 4 questions d'entraînement réparties sur 1 thèmes, dont Multicœur et synchronisation.

Domaine: Multicœur et synchronisation

S'entraîner : questions sur Course aux données (data race)

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.

« Course aux données (data race) » dans les explications

Questions mentionnant « Course aux données (data race) » (4)

  1. Quelle description de la course aux données (data race) est correcte ?
  2. 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 ?
  3. Quel est le fonctionnement d’une instruction fetch-and-add, comme amoadd.w de RISC-V ou lock xadd de x86 ?
  4. Quelle description de la section critique est correcte ?

Termes associés

Section critique Acquisition-libération (acquire-release) Barrière mémoire Cohérence séquentielle Compare-and-swap Espionnage de bus (snooping) Faux partage (false sharing) Instruction atomique Interblocage (deadlock) LR/SC

Retour au glossaire