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 ]] | 
| < | > | 
| 🥇 |