Slide 13
Slide 13 text
スレッドセーフでない例1・インクリメント
• count++はマルチスレッドで以下のような順序で実行されると値が加
算されない
• 1. スレッドAでcountの値を一時領域に保持(count=0,一時領域=0)
• 2. スレッドBでcountの値を一時領域に保持(count=0,一時領域=0)
• 3. スレッドAで一時領域の値に1を足す(count=0,一時領域=1)
• 4. スレッドBで一時領域の値に1を足す(count=0,一時領域=1)
• 5. スレッドAで変数countに一時領域の値を戻す(count=1,一時領域=1)
• 6. スレッドBで変数countに一時領域の値を戻す(count=1,一時領域=1)
• この例をスレッドセーフにするために、以下の二つの対応案がある
• スレッドA,Bで同時にcount++が呼ばれないように制御する
• スレッドセーフなクラスを利用してcountの値を保持する
13