データベース
基本情報技術者試験 科目A免除 修了試験 20141221 実施分 問17
各タスクがタスク間共有変数を更新するときに,タスク間の同期制御を行わないと思わぬ結果を招くことがある。タスク間共有変数xの初期値が3のとき,タスクAが代入文 x=x+x を実行し,タスクBが代入文 x=x×x を実行すると,最終的なxの値が12となるのは,どの順番で実行されたときか。ここで,各代入文はそれぞれ次の四つの部分に分けて処理される。
タスクA(x=x+x)
a1 xの値を参照しeとする。
a2 xの値を参照しfとする。
a3 e+fを計算しgとする。
a4 gによってxの値を更新する。
タスクB(x=x×x)
b1 xの値を参照しhとする。
b2 xの値を参照しiとする。
b3 h×iを計算しjとする。
b4 jによってxの値を更新する。
答えを選ぶ
出典:基本情報技術者試験 科目A免除 修了試験 20141221 実施分 問17(問題文は IPA の公開問題。解説は当サイト作成)
解説に誤りを見つけたら、解説の誤りを報告してください。
答えと解説を見る
正解:イ
覚える知識
排他制御なし共有変数更新の実行順序トレース
同期制御なしに共有変数を更新すると実行順序により結果が変わるため、排他制御が必要となる。
この問題で必要なこと
各順序でxの参照・更新の時点を追い、最終値が12になる順序(a1→b1…b4→a2…)を確認する。
ひっかけ
途中でxが更新された後の参照を見落として、3+9など別の値になる順序を選ばせる。
この知識の出題:本試験系 0 回・免除試験 10 回(公開問題での観測値)。頻出知識ランキング825位(全1,254件中)。