本文へスキップ

平成22年度 春期 ITパスポート試験 問82

この問題の解説と、これまでの解答の記録です。

問82
頻出度★☆☆

2台のPCから一つのファイルを並行して更新した。ファイル中の同一データ(データ1)に対する処理が①~④の順に行われたとき,データ1はどの値になるか。ここで,データ1の初期値は5であった。

PC−A 【処理内容】PC−B 【処理内容】
① データ1を読み込み,10を足す。② データ1を読み込み,1を引く。
③ ①の結果を,データ1に書き込む。④ ②の結果を,データ1に書き込む。
出典 平成22年度 春期 ITパスポート試験 問82
解説

問 82

  • ア

    正解 ①〜④ の順に、各処理が「いつ読み、いつ書いたか」を追えば答えが出る。初期値は 5。①で PC−A がデータ1を読み込むが、この時点のファイルの値は 5 なので、A は手元で 5+10=15 を計算する。②で PC−B がデータ1を読み込むが、③の書き込みはまだ行われていないためファイルの値は依然 5 で、B は手元で 5−1=4 を計算する。③で PC−A が①の結果 15 をファイルに書き込み、データ1は 15 になる。④で PC−B が②の結果 4 を書き込むため、直前の 15 は上書きされて消え、データ1は最終的に 4 となる。ここで起きているのは、排他制御を行わずに同一データを並行更新したときに、先に反映された更新(+10)が後からの書き込みで失われる「更新の消失(ロストアップデート)」である。よって正解は ア(4)。

  • 不正解イ

    5 は更新前の初期値そのもの。③と④で実際にファイルへの書き込みが行われているので、値が初期値のまま残ることはない。また +10 と −1 は打ち消し合わないため、二つの更新が相殺されて 5 に戻るという読み方も成り立たない。

  • 不正解ウ

    14 は 5+10−1 であり、PC−A と PC−B 双方の更新が正しく反映された「本来あるべき値」。これは排他制御(ロック)が効いて②が③の書き込み後に読み込む場合の結果であって、本問の順序 ①→②→③→④ では②が読むのは書き込み前の 5 なので、B の計算結果は 14 ではなく 4 になる。

  • 不正解エ

    15 は③で PC−A が書き込んだ直後の値だが、最後の④で PC−B が自分の計算結果 4 を書き込むため、15 は上書きされて残らない。問われているのは ④ まで終えた最終的な値である点に注意する。

ここがポイント
  • 排他制御をせずに複数の利用者が同一データを並行更新すると、後から行われた書き込みが先の更新を上書きし、先の更新が失われる「更新の消失(ロストアップデート)」が発生する。各処理が計算に使うのは「自分が読み込んだ時点の値」であり、その後に相手が書き込んだ値は反映されない。
  • これを防ぐ仕組みが排他制御(ロック)であり、読み込みから書き込みまでの一連の操作を一つのトランザクションとして扱って他方を待たせれば、5+10−1=14 のように両方の更新が正しく反映される。
用語

解答の記録