データベースシステムにおいて,二つのプログラムが同一データへのアクセス要求を行うとき,後続プログラムのアクセス要求に対する並行実行の可否の組合せのうち,適切なものはどれか。
ここで,表中の○は二つのプログラムが並行して実行されることを表し,×は先行プログラムの実行終了まで後続プログラムは待たされることを表す。
正答4
解説
正解は4です。
この問題は、データベースの共用ロック(共有ロック)と排他ロックについて、先行と後続のプログラムが並行して実行できるかどうかの組合せを問うています。
共用ロックはデータを読むときにかけるロックで、他のプログラムも同時に読めます。
排他ロックはデータを更新するときにかけるロックで、他のプログラムは読むことも更新することもできません。
【選択肢別解説】
1:× 先行が排他ロック、後続が共用ロックの組合せを○としています。
先行が更新中のデータを後続が読むと確定前の値を読んでしまうので、×が正しいです。
先行が共用、後続が排他の組合せも、読込みの途中で更新されてしまうので×が正しいです。
2:× 先行が共用ロック、後続が排他ロックの組合せを○としています。
先行が読んでいる間に後続が更新すると、先行の読込み結果が不整合になるため、×が正しいです。
3:× 先行が排他ロック、後続が共用ロックの組合せを○としています。
先行が更新中のデータを読ませると不整合が起こるため、×が正しいです。
4:○ 共用ロックどうしの組合せだけが○で、排他ロックが関わる組合せは全て×です。
読込みどうしは互いに影響しませんが、更新が関わる場合は一方が終わるまで待たせる必要があるからです。
【ポイント】
「共用と共用だけが両立し、排他はどのロックとも両立しない」と覚えましょう。
ロックによる待ちが互いに発生して処理が進まなくなる状態をデッドロックといいます。