/* Page prose (de) */
"GuardAgainstReentrancy" = "# Wie du dich gegen Reentrancy absicherst\n\nDie Regel: **lass keinen Suspendierungspunkt inmitten einer Invariante.** Zwei praktische Wege, sie einzuhalten.\n\n**Halte die Prüfung und die Änderung zusammen, ohne `await` dazwischen.** Erledige jegliches Warten *zuerst*, prüfe-und-mutiere dann in einem einzigen synchronen Durchlauf, den der Actor nicht unterbrechen kann:\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\nJetzt laufen der `guard` und das `balance -= amount` unmittelbar hintereinander ohne eine Suspendierung, also kann sich keine andere Aufgabe zwischen sie schleichen. Eine Abhebung gelingt; die andere wird abgelehnt. Keine Überziehung.\n\n**Oder prüfe nach jedem `await` erneut.** Wenn du wirklich in der Mitte warten musst, lies den Zustand nach dem Fortsetzen erneut und validiere erneut; verlasse dich nie auf eine Momentaufnahme von vor dem `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\nBeide Ansätze teilen eine Idee: ein Actor schützt jeden *einzelnen* Zugriff, aber eine **mehrschrittige Invariante** (\"prüfen, dann handeln\") ist nur sicher, wenn keine Suspendierung sie zerteilt. Reentrancy ist ein Feature (es hält Actors davon ab, in einen Deadlock zu geraten, während sie warten), aber es bedeutet, dass du dir überlegen musst, was sich über jedes `await` hinweg ändern kann.\n\n[Zurück](@previous)  |  Seite 5 von 7  |  [Weiter: Sendable, kurz](@next)";
