TL;DR
単一のリソースに同時にアクセスすると、競合状態などの不具合が起きるプログラムの部分。
なぜ必要か
共有のリソースを複数のスレッドやプロセスが同時に扱うと、データの整合性が崩れる。Wikipedia ではアクセスカウンタの例を挙げている。値が 100 のときに 2 人が同時に訪問すると、両方が 100 を読んで 1 を足すので、102 になるべき値が 101 になってしまう。
仕組み
アトミック操作や mutex を使うと、クリティカルセクションへの同時アクセスを避けられる。
ロックを使う場合は、1 つのスレッドだけがクリティカルセクションに入れるようにし、他のスレッドは待たせる。Windows API の CRITICAL_SECTION や POSIX スレッドの pthread_mutex_t のように、OS やライブラリが排他制御の仕組みを用意している。Java などの言語には、構文で排他制御を書く機能がある。
注意点
排他制御を使うときは、デッドロックに注意する。