×
システム構成・性能・ソフトウェア

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

試験でのポイント

データベースのトランザクション処理や、OSの並行処理の分野で最重要テーマの一つです。

  • 共有ロックと専有ロック:データベースの排他制御において、データを「読み込む」だけの場合は複数の処理が同時にアクセスしても問題ないため、他の読み込みを許容する「共有ロック」をかけます。一方、データを「書き換える(更新・削除)」場合は、他の処理からの読み込みも書き込みも一切禁止する「専有ロック(排他ロック)」をかける、という使い分けが頻出です。
  • デッドロックの発生条件と対策:プロセスAが資源Xをロックしたまま資源Yを要求し、同時にプロセスBが資源Yをロックしたまま資源Xを要求すると、お互いに身動きが取れなくなります(デッドロック)。これを防ぐためには、「複数の資源を要求する場合は、常に同じ順番(例:必ずX→Yの順)でロックを取得するようにルール化する」といった対策が有効であると問われます。
  • 不可分操作(アトミック操作):ロックをかけるという操作自体が、他の処理から割り込まれない「これ以上分割できない単一の操作(アトミック操作)」としてハードウェアレベルで保証されている必要がある点も重要です。

関連する用語

デッドロック、セマフォ、クリティカルセクション