No.107 各タスクがタスク間共有変数を更新するときに,タスク間の同期制御を行わないと思わぬ結果を招くことがある。
タスク間共有変数xの初期値が3のとき,タスクAが代入文 x=x+x を実行し,タスクBが代入文 x=x×xを実行すると,最終的なxの値が12となるのは,どの順番で実行されたときか。
ここで,各代入文はそれぞれ次の四つの部分に分けて処理される。
タスク間共有変数xの初期値が3のとき,タスクAが代入文 x=x+x を実行し,タスクBが代入文 x=x×xを実行すると,最終的なxの値が12となるのは,どの順番で実行されたときか。
ここで,各代入文はそれぞれ次の四つの部分に分けて処理される。
⭕️
❌
💾
🖊 | ☑️ |
⭕️ | [[ AnswerCalc[0] ]] % | A | [[ AnswerCalc[1] ]] |
|
|
|
|
xの初期値が3なので、それぞれの順番で実行して最終的にx=12になるものを見つけます。
- a1→a2→b1→b2→a3→a4→b3→b4
- a1:e←3
- a2:f←3
- b1:h←3
- b2:i←3
- a3:3+3=6,g←6
- a4:x←6
- b3:3×3=9,j←9
- b4:x←9
- a1→b1→b2→b3→b4→a2→a3→a4
正しい。- a1:e←3
- b1:h←3
- b2:i←3
- b3:3×3=9,j←9
- b4:x←9
- a2:f←9
- a3:3+9=12,g←12
- a4:x←12
- b1→a1→a2→a3→a4→b2→b3→b4
- b1:h←3
- a1:e←3
- a2:f←3
- a3:3+3=6、g←6
- a4:x←6
- b2:i←6
- b3:3×6=18,j←18
- b4:x←18
- b1→b2→b3→a1→a2→a3→a4→b4
- b1:h←3
- b2:i←3
- b3:3×3=9,j←9
- a1:e←3
- a2:f←3
- a3:3+3=6,g←6
- a4:x←6
- b4:x←9
💾
✔️
[[ d.CommentTxt ]] |
< | > |
🥇 |