基本情報技術者試験 2002年度 = 平成14年度・春期 午前 問31

 各タスクがタスク間共有変数を更新するときに、タスク間の同期制御を行わないと思わぬ結果を招くことがある。タスク間共有変数x の初期値が3のとき、タスクAが式xxx を実行し、タスクBが式xx × x を実行すると、最終的なx の値が12となるのは、どの順番で実行が行われたときか。ここで、各式はそれぞれ次の四つの部分に分けられて処理される。

タスクA(xxx の文)
 a1 x の値を参照しe とする。
 a2 x の値を参照しf とする。
 a3 ef を計算しg とする。
 a4 g によってx の値を更新する。
タスクB(xx × x の文)
 b1 x の値を参照しh とする。
 b2 x の値を参照しi とする。
 b3 h × i を計算しjとする 。
 b4 j によってx の値を更新する。

 ア  a1 → a2 → b1 → b2 → a3 → a4 → b3 → b4
 イ  a1 → b1 → b2 → b3 → b4 → a2 → a3 → a4
 ウ  b1 → a1 → a2 → a3 → a4 → b2 → b3 → b4
 エ  b1 → b2 → b3 → a1 → a2 → a3 → a4 → b4

解答

 イ

解説

 各タスクがタスク間共有変数を更新するときに、タスク間の同期制御を行わないと思わぬ結果を招くことがあります。
 最終的なx の値が12となるのが、どの順番で実行が行われたときであるのかは、一つずつ計算して調べると確実です。各手順で行われる代入は以下のようになり、選択肢を検討した段階で正解が分かります。

ア a1 → a2 → b1 → b2 → a3 → a4 → b3 → b4
以下に示すように、変数に値が代入されます。
 e=3 → f=3 → h=3 → i=3 → g=6 → x=6 → j=9 → x=9

イ a1 → b1 → b2 → b3 → b4 → a2 → a3 → a4
以下に示すように、変数に値が代入されます。
 e=3 → h=3 → i=3 → j=9 → x=9 → f=9 → g=12 → x=12


BohYoh.comトップページへ