/* Page prose (fr) */
"DataRace" = "# Le bug: une data race\n\nUne **data race** est le cas où deux threads accèdent au même morceau de mémoire en même temps, et où au moins l'un d'eux écrit. Une **condition de course** est la famille plus large: n'importe quel bug dont le résultat dépend du *timing* imprévisible d'un travail concurrent. Toute data race est une condition de course; toute condition de course n'implique pas directement la mémoire. Dans ce chapitre, les deux voyagent ensemble.\n\nVoici la banque. Un compte, un solde. Mille caissiers enregistrent chacun un unique dépôt de `1`. Le solde devrait finir exactement à `1000`.";
"DataRace-2" = "**Observe l'exécution:** exécute le code quelques fois. Tu verras quelque chose comme `Final balance: 647 (expected 1000)`. Exécute de nouveau: `581`. Encore: `621`. Encore: `658`. **Le nombre change à chaque exécution, et il est généralement faux.** Aucune ligne de ce code n'est mal écrite. La logique (lire, ajouter un, réécrire) est exactement correcte pour *un* caissier. Elle s'effondre parce que mille d'entre eux le font à la fois.\n\nSuis la trace de deux caissiers qui entrent en collision:\n\n1. Le caissier A lit `balance` → `500`.\n2. Le caissier B lit `balance` → `500` (A n'a pas encore réécrit).\n3. Le caissier A écrit `501`.\n4. Le caissier B écrit `501`.\n\nDeux dépôts ont eu lieu. Le solde a monté de *un*. Le dollar du caissier B s'est volatilisé, une **mise à jour perdue**. Voilà tout le bug: `balance += 1` a l'air atomique, mais c'est une lecture, puis une écriture, avec un intervalle entre les deux. Sur une file concurrente, un autre caissier peut se glisser dans cet intervalle. (Le découper en trois lignes explicites ci-dessus ne fait qu'élargir l'intervalle pour que tu le voies à chaque exécution; `account.balance += 1` sur une seule ligne a exactement le même défaut, il perd juste des mises à jour un peu moins souvent.)\n\n* callout(Essaie): Fais passer la boucle de `1_000` à `10` caissiers et exécute-la quelques fois. Le solde sort-il encore faux aussi souvent?\n\n[Précédent](@previous)  |  page 2 sur 9  |  [Suivant: Difficile à attraper](@next)";
