データベース
基本情報技術者試験 科目A免除 修了試験 20110724 実施分 問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 の値を更新する。
- ア 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
出典:基本情報技術者試験 科目A免除 修了試験 20110724 実施分 問23
答えと解説を見る
正解:イ
覚える知識
排他制御なし共有変数更新の実行順序トレース
排他制御なしで複数タスクが共有変数を更新すると、実行順序により結果が変わる。
この問題で必要なこと
各ステップをたどる。a1でe=3、b1,b2,b3で9、b4でx=9、a2でf=9、a3,a4でx=12となる順序がイ。
ひっかけ
参照のタイミングを誤ってトレースするとx=9や6・81等になる。
この知識の出題:本試験系 0 回・免除試験 10 回(公開問題での観測値)