/* Page prose (fr) */
"GuardAgainstReentrancy" = "# Comment se prémunir contre la réentrance\n\nLa règle: **ne laisse pas de point de suspension au milieu d'un invariant.** Deux façons pratiques de l'honorer.\n\n**Garde la vérification et le changement ensemble, sans `await` entre eux.** Fais toute l'attente *d'abord*, puis vérifie-et-mute en une seule passe synchrone que l'actor ne peut pas interrompre:\n\n```swift\nfunc withdraw(_ amount: Int, by name: String) async -> Bool {\n    // Do the async work up front...\n    try? await Task.sleep(for: .seconds(1))   // e.g. approval\n\n    // ...then check and deduct with NO await between them.\n    guard balance >= amount else {\n        print(\"\\(name): denied (only \\(balance) available)\")\n        return false\n    }\n    balance -= amount\n    print(\"\\(name): withdrew \\(amount), balance now \\(balance)\")\n    return true\n}\n```\n\nMaintenant le `guard` et le `balance -= amount` s'exécutent l'un après l'autre sans suspension, donc aucune autre tâche ne peut se glisser entre eux. Un retrait réussit; l'autre est refusé. Pas de découvert.\n\n**Ou revérifie après chaque `await`.** Si tu dois vraiment attendre au milieu, relis l'état après avoir repris et revalide; ne fais jamais confiance à un instantané pris avant le `await`:\n\n```swift\nguard balance >= amount else {\n    return false\n}\ntry? await Task.sleep(for: .seconds(1))\n// Re-check: the balance may have changed while we were suspended.\nguard balance >= amount else {\n    print(\"\\(name): denied on re-check\")\n    return false\n}\nbalance -= amount\n```\n\nLes deux approches partagent une idée: un actor protège chaque accès *individuel*, mais un **invariant en plusieurs étapes** (\"vérifier, puis agir\") n'est sûr que si aucune suspension ne le coupe. La réentrance est une fonctionnalité (elle empêche les actors de s'interbloquer pendant qu'ils attendent), mais elle signifie que tu dois raisonner sur ce qui peut changer à travers chaque `await`.\n\n[Précédent](@previous)  |  page 5 sur 7  |  [Suivant: Sendable, brièvement](@next)";
