データベース|平成24年度 秋期 ITパスポート試験(特別措置試験) 問80
ある在庫管理システムは,複数の入力を同時並行して処理し,在庫数を更新しているが,排他制御は行っていない。ある時点での在庫数が100であったとき,入力された二つの入力 A,B に応じて,図に示す処理が ① → ② → ③ → ④ の順序で実行された場合,処理④が終了した時点の在庫数は幾つになるか。
〔図(書き起こし)〕在庫管理システムの中に2つの処理内容が在り,どちらも“在庫数”を読み書きする。
・入力A の処理内容 … ①“在庫数”を読み込み,入庫数の50を加える。/④結果を“在庫数”に書き込む。
・入力B の処理内容 … ②“在庫数”を読み込み,出庫数の30を引く。/③結果を“在庫数”に書き込む。
- 70
- 100
- 120
- ✓ これが正解150
解説
後から書き戻した側の値が、先に書いた側の値を上書きします。
同じ値を二つの処理が同時に読み書きする場面でした。守りの仕組みを置いていないので、互いを待たせません。最初の処理が、在庫の値を読み込みます。読んだ値は百で、そこへ五十を足して百五十を手元に持ちました。ところが書き戻す前に、もう一方が同じ値を読みます。読んだ値はまだ百のままで、そこから三十を引きました。先に書き戻したのは、その七十のほうです。最後に、手元に百五十を持っていた側が書き戻しました。だから七十は上書きされ、残るのは百五十になります。この数を挙げた肢が当たり、片方の更新が消えました。読んだ時点の値が古いままだったことが、原因です。つまり守りの仕組みが無いと、後から書いた側だけが残ります。読んだ時点で古い値をつかんでいたのです。シラバスも、同時実行制御と排他制御を並べて挙げています。
ほかの選択肢はなぜ違うのか
- 七十という値を挙げた肢のほうです。引く側だけが残った、と考えた形になります。確かに七十は、いったん書き戻されていました。ところがその後に、もう一方が書き戻します。書き戻す順が逆でした。その七十は最後に上書きされました。
- 百という値を挙げた肢というのが、こちらです。足した分と引いた分が打ち消し合う形に見えます。ところが二つの処理は、同じ古い値を読みました。打ち消し合うのは、順に処理した場合です。前提が違っています。同時に読んだのが原因です。
- 百二十という値を挙げた肢が、こちらに当たります。足して引いた結果を、正しく積んだ値でした。守りの仕組みが在れば、この値になります。ところが設問は、置いていないと断っていました。あるべき値のほうです。設問の答えではありません。
この問題に関係する言葉
- 排他制御同じデータを同時に更新しても、矛盾が起きないようにする仕組みです。先の処理が終わるまで、後の処理を待たせて防ぎます。
出典:平成24年度 秋期 ITパスポート試験(特別措置試験) 問80(改変:原典の図表をテキストに書き起こした)
同じ単元をまとめて解くならデータベースへ。
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)