過去問ドリル

平成25年度 秋期 ITパスポート試験 問67

テクノロジ/データベース

あるトランザクション処理は,①共有領域から値を読み取り,②読み取った値に数値を加算し,③結果を共有領域に書き込む手順からなっている。複数のトランザクションを並列に矛盾なく処理するためには,トランザクション処理のどの時点で共有領域をロックし,どの時点でロックを解除するのが適切か。 時間の流れ:時点(a)→ ①共有領域から値を読み取り → 時点(b)→ ②読み取った値に数値を加算 → 時点(c)→ ③結果を共有領域に書き込む → 時点(d) (注:本サイトでは原問題の図表を文字表記に変換しています)

出典:平成25年度 秋期 ITパスポート試験 問67

正解:イ

解説

複数の処理が同じデータを同時に更新すると,片方の更新結果が失われるなどの矛盾が起きます。これを防ぐために,読み取る前にロックをかけて他の処理を待たせ,書き込みが終わってからロックを解除します。この例では,①の読取りの前(時点 a)でロックし,③の書込みが終わった後(時点 d)で解除するのが適切です。途中で解除したり,読取りの後にロックしたりすると,他の処理が古い値を読んでしまうおそれがあります。

下線の用語は 用語集 で意味を確認できます。

選択肢ごとの解説

  • ア誤り。時点(c)で解除すると,③の書込みが終わる前に他の処理が古い値を読み取れてしまいます。
  • イ正しい。読取り前の時点(a)でロックし,書込み後の時点(d)で解除します。
  • ウ誤り。時点(b)でロックしても,①の読取りの間に他の処理が同じ値を読めてしまいます。また,(c)での解除は早すぎます。
  • エ誤り。時点(b)でロックしても,①の読取りの間に他の処理が同じ値を読めてしまいます。ロックは①の前にかける必要があります。
ITパスポートの過去問を演習モードで解く