クリティカルセクション【critical section】

概要

クリティカルセクションとは、マルチタスクマルチスレッドの環境で、複数の処理が共有資源に同時にアクセスすることでデータの不整合や破壊が生じうるプログラム上の区間のこと。そのような区間を同時実行させないための排他制御機構を指すこともある。
クリティカルセクションのイメージ画像

マルチタスクマルチスレッドの環境では、複数のプロセスやスレッド(以下では便宜上両者をまとめてスレッドと呼ぶ)が同じメモリ領域やファイルデータベースなどを共有しながら並行して動作する。このとき、複数の処理が同じ資源に同時にアクセスすると、一方の結果がもう一方によって上書きされたり、更新途中の値が読み取られたりして、想定しない結果を招くことがある。

このような「競合状態」(race condition)が発生しうるコード上の区間をクリティカルセクションという。そのような区間は一度に一つのスレッドだけが実行できるようにする必要があり、排他制御によって保護される。クリティカルセクションに入ることができたスレッドだけが共有資源にアクセスできるようにする。

排他制御には「占有ロック」が用いられることが多い。あるスレッドがクリティカルセクションに入ると資源をロックして占有し、処理が完了するとロックを解放する。ロック中はその資源へのアクセスを求める他のスレッドは待機状態に置かれ、解放後に待機中のいずれかが次のロックを取得して実行を再開する。「ミューテックス」や「セマフォ」などの同期機構が用いられることもある。

主要なオペレーティングシステム(OS)やプログラミング言語にはクリティカルセクションを管理するための機能が備わっており、開発者は共有資源を扱う区間を明示的に指定して同期処理を記述する。ただし、制御を誤ると複数の処理が互いの解放を待ち続けてシステムが停止する「デッドロック」(deadlock)や、特定の処理がいつまでも資源を得られない「リソーススタベーション」(starvation:飢餓状態)が発生することがある。クリティカルセクションの範囲は必要最小限にとどめ、ロックの取得順序を適切に設計することが求められる。

(2026.6.25更新)
 

他の辞典等による「クリティカルセクション」の解説 (外部サイト)

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。