データベース|平成22年度 春期 ITパスポート試験 問82
2 台の PC から一つのファイルを並行して更新した。ファイル中の同一データ(データ 1)に対する処理が ① 〜 ④ の順に行われたとき,データ 1 はどの値になるか。ここで,データ 1 の初期値は 5 であった。
〔図〕2 台の PC とファイルの関係(当課が処理内容を字に書き起こしたもの)
```
PC−A 【処理内容】
① データ1を読み込み,10 を足す。
③ ①の結果を,データ1に書き込む。
PC−B 【処理内容】
② データ1を読み込み,1 を引く。
④ ②の結果を,データ1に書き込む。
中央のファイルに「データ1」があり、両方の PC が読み書きする。
処理はまる数字の順(① → ② → ③ → ④)に行われる。
```
- ✓ これが正解4
- 5
- 14
- 15
解説
読み込んだ時の値をもとに書くので、先の足し算が消えます。
一つの記録を、二台の機が同時に書き換えました。初めの値は五で、四つの操作が順に進みます。一つ目の機が読み、十を足して十五を手元に持ちます。ただし記録そのものは、まだ五のままでした。次に二つ目の機も読みますが、そこは五のままです。一を引いて四を手元に持ちました。三つ目の操作で、一つ目の機が十五を書き込みます。続く四つ目で、二つ目の機が四を書き込みました。後から書いたほうが残るので、答えは四になります。この数を挙げた肢が当たり、先の足し算は消えました。両方が反映されると考えると、十四という数が出ます。ところが二つ目の機は、足した後の値を見ていません。三つ目で止めると、十五という数になりました。これを防ぐのが排他制御で、読んだ側を待たせます。シラバスも、この仕組みを項目として置いています。
ほかの選択肢はなぜ違うのか
- 五という数を挙げた肢が、こちらのほうです。何も起きなかった、と考えた形でした。ところが書き込みは、二度とも行われています。値は途中で十五になり、次に四へ変わりました。初めの値はそこに残りません。動いた後の値になります。
- 十四という数を挙げた肢が、こちらに当たります。十を足し、一を引いた結果に当たります。両方の書き換えが届いた、と考えた形でした。けれども二つ目の機が読んだのは、初めの値です。足した分が伝わりません。消えた側が残ります。
- 十五という数を挙げた肢が、こちらに当たります。三つ目の操作までで、止めた形になります。確かにその時点では、記録は十五でした。ところが四つ目の書き込みが、後に控えています。上書きされました。数える手前で止まった形です。順が効きました。
この問題に関係する言葉
- 排他制御同じデータを同時に更新しても、矛盾が起きないようにする仕組みです。先の処理が終わるまで、後の処理を待たせて防ぎます。
出典:平成22年度 春期 ITパスポート試験 問82(改変:原典の図表をテキストに書き起こした)
同じ単元をまとめて解くならデータベースへ。
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)