並行更新でファイルの最終値はどう決まる?
ITパスポート試験 令和2年度10月 問72 / データベース › トランザクション処理
過去問にチャレンジ
2台のPCから一つのファイルを並行して更新した。ファイル中のデータnに対する処理が①~④の順に行われたとき,データnは最後にどの値になるか。ここで,データnの初期値は10であった。

- ア
5
- イ
10
- ウ
12
- エ
17
会話形式の解説
講師この問題は、各PCが値を読んだ時点と、計算結果を書き込んだ時点を分けて追うのがポイントです。
受験者初期値の10から5を引いて7を足すなら、12になると思いました。
講師まずPC-Aは10を読み、5を引いた結果の5を保持します。この段階では、ファイルの値はまだ10です。
受験者では、次にPC-Bが読むのも10ですか。
講師そうです。PC-Aが書き込む前なので、PC-Bは10を読み、7を足した17を保持します。
受験者その後、PC-Aが5を書き込むので、一度はファイルの値が5になりますね。
講師はい。ただし最後にPC-Bが保持していた17を書き込みます。したがって最終値は17です。
受験者5は途中の値で、10は書き込み前の値なのですね。
講師そのとおりです。12になるのは、PC-BがPC-Aの書き込んだ5を読んでから7を足した場合です。実際にはPC-Bの読み込みが先です。
受験者読み込み時には両方のPCが10を使い、最後の書き込みで17になると分かりました。
講師並行して更新する問題では、計算順だけでなく、読み込みと書き込みを時系列で並べて確認しましょう。
まとめ
PC-AとPC-Bは、どちらもファイルの値が10のときに読み込みます。PC-Aは5、PC-Bは17をそれぞれ計算して保持します。PC-Aが5を書き込んだ後、PC-Bが17を書き込むため、最終値は17です。
解答・解説
正解はエです
この問題のテーマ
並行して更新するとき、各PCがいつ値を読み、どの順番で書き込むかを問う問題です。
解き方の考え方
読み込んで計算した結果は、書き込むまでファイルの値に反映されません。①でPC-Aは10−5=5を保持します。②ではファイルがまだ10なので、PC-Bは10+7=17を保持します。③で5、最後の④で17が書き込まれるため、正解はエです。
選択肢ごとの解説
- ×ア 55はPC-Aが①で計算し、③で書き込む値です。しかし④でPC-Bが17を書き込むため、最後の値にはなりません。
- ×イ 1010はファイル中のデータの初期値です。③と④で書き換えられるので、最後まで10のままではありません。
- ×ウ 1212は、PC-Bが5を読んで7を足した場合の値です。実際の②は③より前なので、PC-Bが読む値は10です。
- ○エ 17PC-Bは②で読み込んだ10に7を足し、17を保持します。④でその17を最後に書き込むので、最終値は17です。
補足
10−5+7=12と続けて計算すると、PC-BがPC-Aの更新後の値を読んだことになってしまいます。この問題では両PCが10を読み、PC-Aの書き込みは後からPC-Bの書き込みで上書きされます。
POINT
- 読み込みと書き込みを別の処理として時系列に並べます。
- ②の時点では③の書き込みがまだなので、ファイルの値は10です。
- 最後に書き込まれた17が、ファイルの最終値になります。
