TL;DR

単一のリソースに同時にアクセスすると、競合状態などの不具合が起きるプログラムの部分。

なぜ必要か

共有のリソースを複数のスレッドやプロセスが同時に扱うと、データの整合性が崩れる。Wikipedia ではアクセスカウンタの例を挙げている。値が 100 のときに 2 人が同時に訪問すると、両方が 100 を読んで 1 を足すので、102 になるべき値が 101 になってしまう。

仕組み

アトミック操作や mutex を使うと、クリティカルセクションへの同時アクセスを避けられる。

ロックを使う場合は、1 つのスレッドだけがクリティカルセクションに入れるようにし、他のスレッドは待たせる。Windows API の CRITICAL_SECTION や POSIX スレッドの pthread_mutex_t のように、OS やライブラリが排他制御の仕組みを用意している。Java などの言語には、構文で排他制御を書く機能がある。

注意点

排他制御を使うときは、デッドロックに注意する。

関連

出典