2台の PC から一つのファイルを並行して更新した。
ファイル中のデータ n に対する処理が①〜④の順に行われたとき,データ n は最後にどの値になるか。
ここで,データ n の初期値は10であった。
PC-A の処理内容:① データ n を読み込み,5を引く。
③ 処理①の結果を,データ n に書き込む。
PC-B の処理内容:② データ n を読み込み,7を足す。
④ 処理②の結果を,データ n に書き込む。
5 10 12 17 購入状況を確認しています… 正答 4
解説 正解は4です。
2台のPCが同じファイルのデータnを並行して更新したときに、最終的にnがどの値になるかを求める問題です。
図では、PC-Aが①でデータnを読み込んで5を引き、③でその結果を書き込みます。
PC-Bは②でデータnを読み込んで7を足し、④でその結果を書き込みます。
【計算】
データnの初期値は10です。
①で、PC-Aがn=10を読み込み、5を引いて5を得ます。
②で、PC-Bがn=10を読み込み、7を足して17を得ます。
③で、PC-Aが5をデータnに書き込み、nは5になります。
④で、PC-Bが17をデータnに書き込み、nは17になります。
したがって、データnの最終的な値は17です。
【選択肢別解説】
1:× 5は、③でPC-Aが書き込んだ時点の値です。
その後に④でPC-Bが17を書き込むので、最後の値ではありません。
2:× 10は初期値です。
③と④で書き込みが行われるので、10のままではありません。
3:× 12は、10から5を引き、7を足した本来あるべき値です。
PC-Bは①の結果を反映する前の値10を読み込んでいるので、12にはなりません。
4:○ 最後に書き込んだのはPC-Bで、その値は17です。
PC-Aの更新結果は上書きされて失われています。
【ポイント】
このように、先に行った更新が後の更新で上書きされて消える現象を、ロストアップデート(更新の喪失)といいます。
防ぐには、データを読み込んでから書き込むまで他の処理がアクセスできないようにする排他制御(ロック)を使います。