この問題を防ぐために、排他制御では「ロック」という概念を用います。あるプロセスが共有データにアクセスする際、まずそのデータに対して「鍵(ロック)」をかけます。ロックがかかっている間、他のプロセスはデータを読み書きすることができず、ロックが解除されるまで「待機状態(ブロック)」となります。代表的な実装手法として、オランダの計算機科学者ダイクストラが考案した「セマフォ(Semaphore)」という仕組みが広く知られています。セマフォは、利用可能な資源の数を表す変数と、それを増減させる2つの不可分な操作(P操作:資源の取得・待機、V操作:資源の解放)によって、高度で安全な同期制御を実現します。ただし、排他制御を複雑に組み合わせると、複数のプロセスがお互いに相手が持っているロックの解除を待ち合ってしまい、システム全体が永久に停止してしまう「デッドロック」という致命的な障害を引き起こすリスクがあるため、設計には細心の注意が求められます。
データベースのトランザクション処理や、OSの並行処理の分野で最重要テーマの一つです。
デッドロック、セマフォ、クリティカルセクション