修了試験 2013-07-28実施分 基本情報技術者試験 問23
各タスクがタスク間共有変数を更新するときに,タスク間の同期制御を行わないと思わぬ結果を招くことがある。 タスク間共有変数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の値を更新する。
正答2
解説
正解は2です。 同期制御をしない共有変数の更新で、処理の順番によって結果が変わることを確かめる問題です。 xの初期値3から、各選択肢の順番どおりに処理をたどって最終値を求めます。 【選択肢別解説】 1:× a1とa2でe=3、f=3、b1とb2でh=3、i=3になります。 a3でg=6、a4でx=6となり、b3でj=9、b4でx=9です。 最終値は9です。 2:○ a1でe=3、b1とb2でh=3、i=3、b3でj=9、b4でx=9になります。 続くa2ではf=9となり、a3でg=3+9=12、a4でx=12です。 最終値が12になります。 3:× b1でh=3、a1からa4でx=6に更新されます。 そのあとb2でi=6となり、b3でj=18、b4でx=18です。 最終値は18です。 4:× b1からb3でj=9になり、a1からa4でx=6に更新されます。 最後にb4でx=9に上書きされ、最終値は9です。 【ポイント】 参照と更新の間にほかのタスクが割り込むと、意図しない結果になります。 これを防ぐには、セマフォなどの排他制御で更新処理をまとめて実行させます。まとめて解く
修了試験 2013-07-28実施分を通しで解く(80問)→