/* Page prose (de) */
"WrappingUp" = "# Zusammenfassung\n\nJeder Fehler in diesem Kapitel wächst aus einem Samen: geteilter veränderlicher Zustand, von nebenläufiger Arbeit berührt, ohne dass irgendetwas den Zugriff koordiniert. Was einen Data Race so gefährlich macht, ist, dass er sich versteckt, sodass ein bestandener Test nichts als Glück beweist. Die Erkenntnisse unten sind in Wirklichkeit eine einzige Angewohnheit: lernen, diese Form durch Lesen zu erkennen, und wissen, wie man sie stilllegt.\n\n* Ein **Data Race** ist nebenläufiger Zugriff auf geteilten veränderlichen Zustand mit mindestens einem Schreiber; eine **Race Condition** ist jeder Fehler, dessen Ausgang vom Timing abhängt.\n* Races sind **nichtdeterministisch**: meistens richtig, manchmal falsch, selten reproduzierbar. Du fängst sie, indem du nach geteiltem-und-mutiertem Zustand *liest*, nicht durch Ausführen; ein grüner Lauf beweist nur, dass du dieses Mal Glück hattest.\n* `x += 1` und Dictionary-/Array-Updates sind **Lesen-dann-Schreiben** mit einer Lücke, nicht atomar. Diese Lücke ist der Ort, an dem die Beschädigung lebt.\n* Behebe es, indem du den Zugriff koordinierst: eine **serielle Warteschlange** (nacheinander) oder eine **nebenläufige Warteschlange mit `.barrier`**-Schreibvorgängen (Leser-Schreiber). Aller Zugriff auf ein Stück Zustand muss durch denselben Koordinator gehen: verstecke ihn in einem Typ, sodass Aufrufer ihn nicht umgehen können.\n* Ein **Deadlock** ist ein dauerhaftes zirkuläres Warten. Rufe niemals `sync` auf der Warteschlange auf, auf der du bereits bist, besonders nicht `DispatchQueue.main.sync` vom Hauptthread.\n* **Prioritätsinversion** ist eine Aufgabe hoher Priorität, die auf einer Ressource blockiert, die eine Aufgabe niedriger Priorität hält; halte kritische Abschnitte kurz und mische keine völlig verschiedenen QoS auf einem Lock.\n\n---\n\n## Als Nächstes\n\n**[Operations](Operations.playgroundchapter/Overview)**: Arbeitseinheiten als wiederverwendbare Objekte einwickeln, die du benennen, konfigurieren, abbrechen und verketten kannst, mit `Operation` und `OperationQueue`.\n\n[Zurück](@previous)  |  Seite 9 von 9";
