問題
問82 データDを更新する二つの処理A,Bが,(1)→(3)→(2)→(4)のタイミングで実行された場合,Dの値は幾らになるか。ここで,Dの初期値は2とする。
ア 6
イ 7
ウ 11
エ 21
解説と解答
複数の処理によって同時に同じデータが更新される場合,排他制御などが行われていないと,前の処理の更新結果が,後の処理の更新結果で上書きされてしまうことがあります。これをデータの「二重更新」と言います。この問題では,典型的な二重更新の具体例を用いて,誤った更新結果の内容を尋ねています。ここでは,問題の指示に従って,(1)→(3)→(2)→(4)の順にデータDの値を計算します。
(1)〔処理A〕Dを読み込み,3倍する
データDの初期値は2なので,計算結果として2×3=6を得る
(3)〔処理B〕Dを読み込み,5を加える
データDの初期値は2なので,計算結果として2+5=7を得る
(2)〔処理A〕(1)の結果を,Dに書き込む
データDの値は2から6に更新される
(4)〔処理B〕(3)の結果を,Dに書き込む
データDの値は6から7に更新される
したがって,(4)が終了した時点のデータDの値は7になります。
なお,本来であれば,処理Aが完全に終了してから処理Bを開始するように制御する必要があります。
(1)(2)〔処理A〕データDの初期値2を読み取り,2×3=6の結果を書き込む
(3)(4)〔処理B〕データDの値6を読み取り,6+5=11の結果を書き込む
すなわち,(1)→(2)→(3)→(4)のタイミングで実行されればよく,正しい順序で更新されたときのデータDの値は11です。また,このように処理の実行タイミングを適切に制御する機能のことを排他制御と言います。
以上より正解は,選択肢イです。
アプリケーションデザイナー 代表取締役