データベース|平成21年度 春期 ITパスポート試験 問82
データ D を更新する二つの処理 A,B が,① → ③ → ② → ④ のタイミングで実行された場合,D の値は幾らになるか。ここで,D の初期値は 2 とする。
```
〔処理A の処理内容〕
① D を読み込み,3 倍する。
② ①の結果を,D に書き込む。
〔処理B の処理内容〕
③ D を読み込み,5 を加える。
④ ③の結果を,D に書き込む。
実行タイミング(時間の流れ)… ① → ③ → ② → ④
```
- 6
- ✓ これが正解7
- 11
- 21
解説
読んだ時点の値を、それぞれが手元に持ったまま進みます。
排他制御が働いていない場では、二つの処理が同じ場所を代わる代わる読み書きします。はじめの値は二で、片方は三倍し、もう片方は五を足す決まりでした。最初に前の処理が二を読み、手元で六を作ります。このとき書き戻していないので、元の場所はまだ二のままでした。次に後ろの処理も二を読み、七という値を作ります。それから前の処理が六を書き込み、その後に後ろが七を書き込みます。だから最後に残るのは七で、その値を挙げた肢が当たります。六を挙げた肢は、前の処理が書いた値で止まっていました。十一を挙げた肢は、二つが順に走ったと考えた値です。二十一のほうは、順序を逆にして走らせた値になります。先に書いた六が消える形を、更新の喪失と呼びます。読んでから書くまでの間に、割り込まれたのが原因でした。
ほかの選択肢はなぜ違うのか
- 六を挙げています。前の処理が書いた値でした。確かに一度は、その値が場所に入ります。ところが後ろの処理が、その上へ七を書きます。最後に残るのは、あとから書いたほうです。途中の値を問われたなら、これが答えです。
- 十一を挙げています。二を三倍して五を足した値です。二つが順に走ったと考えれば、この数になります。ところが後ろの処理は、六ではなく二を読みました。読んだ時点で、まだ書き戻されていないからです。順に走らせたなら、これが答えにあたります。
- 二十一を挙げています。二に五を足して三倍した値です。順序を入れ替えて走らせれば、この数になります。ところが実際には、前の処理が先に読んでいました。読む順も書く順も、示された並びのとおりです。逆順に走らせたなら、これが答えです。
この問題に関係する言葉
- 排他制御同じデータを同時に更新しても、矛盾が起きないようにする仕組みです。先の処理が終わるまで、後の処理を待たせて防ぎます。
出典:平成21年度 春期 ITパスポート試験 問82(改変:原典の図表をテキストに書き起こした)
同じ単元をまとめて解くならデータベースへ。
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)