/* Page prose (ja) */
"WrappingUp" = "# まとめ\n\nこの章のすべてのバグは、一つの種から育ちます。並行作業に触れられる共有された可変状態が、アクセスを協調するものを何も持たないことです。data race をこれほど危険にするのは、それが身を隠すことです。ですからテストに通っても、運が良かったこと以外は何も証明されません。以下の要点は、実のところ一つの習慣です。読むことでその形を見抜けるようになり、それを封じる方法を知ることです。\n\n* **data race** とは、少なくとも一人の書き手を伴う、共有された可変状態への並行アクセスです。**競合状態** とは、結果がタイミングに依存するあらゆるバグです。\n* 競合は **非決定的** です。たいてい正しく、ときに誤り、めったに再現しません。捕まえるには、共有され変更される状態を*読んで*探すのであって、実行するのではありません。緑の実行は、今回は運が良かったことを証明するだけです。\n* `x += 1` や辞書・配列の更新は、隙間のある **読んでから書く** 操作であり、アトミックではありません。その隙間こそ、破損が住む場所です。\n* アクセスを協調させて直しましょう。**シリアルキュー**（一度に一つ）か、**`.barrier` 付きの並行キュー** による書き込み（リーダー・ライター）です。一つの状態へのすべてのアクセスは、*同じ*コーディネーターを通らなければなりません。型の内側に隠して、呼び出し側が迂回できないようにします。\n* **デッドロック** とは、永久的な循環待機です。すでに自分がいるキューに `sync` してはいけません。とりわけメインスレッドから `DispatchQueue.main.sync` してはいけません。\n* **優先度逆転** とは、優先度の低いタスクが保持する資源によってブロックされた優先度の高いタスクのことです。クリティカルセクションを短く保ち、大きく異なる QoS を一つのロックで混ぜないようにしましょう。\n\n---\n\n## 次は\n\n**[Operations](Operations.playgroundchapter/Overview)**: 作業の単位を、名前をつけ、構成し、キャンセルし、連鎖できる再利用可能なオブジェクトとして包むこと。`Operation` と `OperationQueue` を使います。\n\n[前へ](@previous)  |  9 / 9 ページ";
