/* Page prose (fr) */
"Reentrancy" = "# Réentrance: la partie subtile\n\nC'est ici que les actors surprennent les gens. Un actor garantit une tâche à l'intérieur à la fois, mais \"à la fois\" a un sens précis. Chaque fois qu'une méthode d'actor atteint un `await` et **se suspend**, elle *sort de l'actor* pendant qu'elle attend. L'actor est maintenant libre, donc **une autre tâche peut entrer**. On appelle cela la **réentrance**: l'actor peut être réentré pendant une suspension.\n\nLa conséquence est tranchante: **toute valeur que tu lis avant un `await` peut avoir changé au moment où tu reprends.** L'état ne reste pas figé à travers une suspension.\n\nObserve-le provoquer un vrai bug. Ce coffre vérifie le solde, effectue une étape asynchrone au milieu de la transaction (imagine contacter un service d'approbation), puis déduit.";
"Reentrancy-2" = "**Observe l'exécution:** les deux guichetiers rapportent un succès, et le solde final est **`-60`**: le compte est à découvert, alors que chaque retrait a soigneusement vérifié qu'il y avait assez d'argent. Voici la séquence:\n\n1. Le guichetier A entre, vérifie `100 >= 80` (ça passe), puis atteint `await` et **se suspend**, libérant l'actor.\n2. Avec l'actor libre, le guichetier B entre, vérifie `100 >= 80` (ça passe aussi; A n'a pas encore déduit!), puis atteint `await` et se suspend lui aussi.\n3. Les deux se réveillent et déduisent: `100 - 80 = 20`, puis `20 - 80 = -60`.\n\nLe guard était vrai pour les deux parce que le solde n'a pas changé *pendant que l'un ou l'autre était suspendu*, mais il a changé *entre la vérification et la déduction*. Ce fossé, c'est le `await`. Le vérifier-puis-agir n'était finalement pas atomique.\n\n* callout(Essaie): Change le sleep en `.seconds(2)`; le découvert se produit quand même. Attendre plus longtemps n'est pas la solution; fermer le fossé à travers le `await`, si.\n\n[Précédent](@previous)  |  page 4 sur 7  |  [Suivant: Se prémunir contre la réentrance](@next)";
