平成25年度 秋期 ITパスポート試験 問67
テクノロジ/データベースあるトランザクション処理は,①共有領域から値を読み取り,②読み取った値に数値を加算し,③結果を共有領域に書き込む手順からなっている。複数のトランザクションを並列に矛盾なく処理するためには,トランザクション処理のどの時点で共有領域をロックし,どの時点でロックを解除するのが適切か。 時間の流れ:時点(a)→ ①共有領域から値を読み取り → 時点(b)→ ②読み取った値に数値を加算 → 時点(c)→ ③結果を共有領域に書き込む → 時点(d) (注:本サイトでは原問題の図表を文字表記に変換しています)
出典:平成25年度 秋期 ITパスポート試験 問67
- アロック:時点(a),ロック解除:時点(c)
- イロック:時点(a),ロック解除:時点(d)
- ウロック:時点(b),ロック解除:時点(c)
- エロック:時点(b),ロック解除:時点(d)
正解:イ
解説
複数の処理が同じデータを同時に更新すると,片方の更新結果が失われるなどの矛盾が起きます。これを防ぐために,読み取る前にロックをかけて他の処理を待たせ,書き込みが終わってからロックを解除します。この例では,①の読取りの前(時点 a)でロックし,③の書込みが終わった後(時点 d)で解除するのが適切です。途中で解除したり,読取りの後にロックしたりすると,他の処理が古い値を読んでしまうおそれがあります。
下線の用語は 用語集 で意味を確認できます。
選択肢ごとの解説
- ア誤り。時点(c)で解除すると,③の書込みが終わる前に他の処理が古い値を読み取れてしまいます。
- イ正しい。読取り前の時点(a)でロックし,書込み後の時点(d)で解除します。
- ウ誤り。時点(b)でロックしても,①の読取りの間に他の処理が同じ値を読めてしまいます。また,(c)での解除は早すぎます。
- エ誤り。時点(b)でロックしても,①の読取りの間に他の処理が同じ値を読めてしまいます。ロックは①の前にかける必要があります。