修了試験 2022-12-11実施分 基本情報技術者試験 問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 xの値をgに更新する。 タスクB(x=x×x) b1 xの値を参照しhとする。 b2 xの値を参照しiとする。 b3 h×iを計算しjとする。 b4 xの値をjに更新する。
正答2
解説
正解は2です。 同期制御をしないと、一方のタスクの参照と更新の間に他方の処理が割り込み、結果が変わることを確かめる問題です。 xの初期値3から、各選択肢の順に変数の値を追います。 【選択肢別解説】 1:× a1とa2でe=3、f=3になります。 b1とb2でh=3、i=3になります。 a3とa4でxは6になります。 b3とb4でj=3×3=9となり、最終的なxは9です。 2:○ a1でe=3になります。 b1からb4でh=3、i=3、j=9となり、xは9に更新されます。 a2でf=9になります。 a3でg=3+9=12、a4でxは12になります。 最終的なxは12となり、条件と一致します。 3:× b1でh=3になります。 a1からa4でe=3、f=3、g=6となり、xは6になります。 b2でi=6、b3でj=3×6=18となり、最終的なxは18です。 4:× b1からb3でh=3、i=3、j=9になります。 a1からa4でxは6になります。 b4でxはjの9に上書きされ、最終的なxは9です。 【ポイント】 同期制御なしでは、実行順序によって結果が6、9、12、18、36などに変わります。 これを防ぐには、セマフォなどで参照から更新までを排他的に実行します。まとめて解く
修了試験 2022-12-11実施分を通しで解く(80問)→