【くりてぃかるせくしょん】
クリティカルセクション とは?
💡 線路の単線区間――すれ違いできないから1列車ずつ通す!
📌 このページのポイント
- 共有データを読み書きするコードの「ここだけは同時実行NG」という区間のこと
- ロック(ミューテックスやセマフォ)で囲んで排他制御する
- 区間は短くするほど並列性が上がりパフォーマンスが良くなる
- クリティカルセクションの設計ミスはレースコンディションやデッドロックの原因になる
クリティカルセクションって何のこと?
どうして同時に実行するとマズいの?
例えばカウンターを+1する処理を考えてみて。「値を読む→+1する→書き戻す」の3ステップの途中で別のスレッドが割り込むと、片方の更新が消えちゃうんだ。これがレースコンディションだよ
どうやって保護するの?
クリティカルセクションは長くても短くても同じなの?
クリティカルセクションを設計するときのコツってある?
3つ覚えておくといいよ。1つ目は「区間をできるだけ短くする」こと。2つ目は「ロックの中でI/Oや時間のかかる処理をしない」こと。3つ目は「ロックの入れ子を避ける」こと。入れ子にするとデッドロックのリスクが急上昇するからね
並行プログラミングって奥が深いんだね!
まとめ:ざっくりこれだけ覚えればOK!
クリティカルセクションって出てきたら「同時に実行すると壊れるから1スレッドだけに制限するコード区間」と思えばだいたいOK!
📖 おまけ:英語の意味
「Critical Section」 = 危険区間・臨界区間
💬 Critical(重大な・危険な)+ Section(区間)で「慎重に扱わないと危険なコードの区間」という意味だよ