基本情報技術者試験
2002年度 = 平成14年度・春期
午前
問31
各タスクがタスク間共有変数を更新するときに、タスク間の同期制御を行わないと思わぬ結果を招くことがある。タスク間共有変数
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
の値を更新する。
ア
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