データベース

基本情報技術者試験 科目A免除 修了試験 200912 実施分 問20

各タスクがタスク間共有変数を更新するときに,タスク間の同期制御を行わないと思わぬ結果を招くことがある。タスク間共有変数 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 の値を更新する。
答えを選ぶ

出典:基本情報技術者試験 科目A免除 修了試験 200912 実施分 問20(問題文は IPA の公開問題。解説は当サイト作成)

答えと解説を見る

正解:イ

覚える知識

排他制御なし共有変数更新の実行順序トレース

排他制御を行わないと、複数タスクの参照と更新が交錯して結果が実行順序に依存する。

この問題で必要なこと

タスクAとBの各手順を指定順に追うと、イの順ではA:e=3、B:h=i=3、j=9でx=9、その後A:f=9、g=12でx=12となる。

ひっかけ

ア・ウ・エは順序から別の値(9, 18, 36など)になる。

この知識の出題:本試験系 0 回・免除試験 10 回(公開問題での観測値)

この知識をアプリで解いて覚える レッスン「トランザクションと排他制御(ロック・デッドロック)」で学ぶ

同じ知識の過去問