【くりてぃかるせくしょん】
クリティカルセクション とは?
最終更新:
💡 線路の単線区間――すれ違いできないから1列車ずつ通す!
共有データを操作するコードのうち、複数のスレッドが同時に実行しないよう保護する区間。ミューテックスなどで排他制御し、更新の競合を防ぐ。
📌 このページのポイント
クリティカルセクションって何のこと?
共有データを扱うコードのうち、同時実行を避ける必要がある区間だよ。単線の線路に列車を1本ずつ通すように、ミューテックスなどのロックで保護するんだ。
同時に動くと、どう困るの?
たとえば値を読んで1を足して書き戻す処理を、ロックなしで2つのスレッドが行うとするね。両方が同じ値を読めば、2回増やしたはずなのに1回分しか残らないことがあるんだ。
ロックすれば、それだけで安全?
同じデータに触れる処理が、対応するロックを守ることが必要だよ。取得してから操作し、終わったら解放するんだ。例外で解放を忘れないよう、C++のlock_guardなど、自動解放の仕組みも使えるよ。
保護している間は全スレッドが止まるの?
WindowsのCRITICAL_SECTIONも同じ意味?
まとめ:ざっくりこれだけ覚えればOK!
「クリティカルセクション」って出てきたら「共有データを安全に扱うため、一度に1スレッドにするコード区間」と思えばだいたいOK!
📖 おまけ:英語の意味
「Critical Section」 = 危険区間・臨界区間
💬 Critical(重大な・危険な)+ Section(区間)で「慎重に扱わないと危険なコードの区間」という意味だよ