2台の PC から一つのファイルを並行して更新した。ファイル中のデータ n に対する処理が①~④の順に行われたとき,データ n は最後にどの値になるか。ここで,データ n の初期値は10であった。 PC-A 【処理内容】 ① データ n を読み込み,5を引く。 ③ 処理①の結果を,データ n に書き込む。 PC-B 【処理内容】 ② データ n を読み込み,7を足す。 ④ 処理②の結果を,データ n に書き込む。
令和2年度 ITパスポート試験 問72
テクノロジ系データベース › トランザクション処理
この問題の解説と、これまでの解答の記録です。
問72
頻出度★☆☆
解説
問 72
不正解ア
5 は③(PC-A の書込み)直後の値。もし④が③より先に、あるいは PC-A が最後に書き込めば 5 が残るが、本問の順序では④が最後なので④の 17 で上書きされ、5 は最終値として残らない。
不正解イ
10 は初期値そのまま。どちらの書込みも反映されない前提だが、実際は③と④で書込みが行われ、少なくとも最後の④の結果が最終値になるため 10 のままにはならない。
不正解ウ
12 は 10−5+7 の値で、排他制御が正しく働き一方が「読込→計算→書込」を終えてから他方が最新値を読む逐次実行なら得られる。しかし本問は両 PC が同じ初期値 10 を読むため更新の消失が起き、12 にはならない。
- エ
正解 データ n の初期値は 10 で、処理は①→②→③→④の順に行われる。①で PC-A が n(=10)を読み込み 5 を引いた 5 を自分のメモリに保持する。②で PC-B が n(=10)を読み込み 7 を足した 17 を自分のメモリに保持する。この時点で両 PC はどちらも元の値 10 を読んでいる。③で PC-A が結果 5 をファイルに書き込み n=5 となり、④で PC-B が結果 17 を書き込んで n=17 となる。最後に書き込んだのは④なので、最終値は「17」(エ)。PC-A が書いた 5 は④の書込みで上書きされて失われる(更新の消失=ロストアップデート)。
ここがポイント
- 排他制御(ロック)なしで複数の処理が同じデータを並行更新すると、後の書込みが先の書込みを上書きして「更新の消失(ロストアップデート)」が起こり、最終値は最後に書き込んだ処理の結果になる。
- トランザクションの独立性(ACID 特性の I=Isolation)を保つには排他制御が必要で、それが無いと本問のように整合しない結果になる。
用語