>>245
volatileとインクリメントの併用は間違えやすいポイントだよ
c++はワンステップで行われるわけでは無く
1)cのロード
2)c += 1の実行
3)cのストア
の3ステップがある。この場合タイミングによっては、
スレッド1  スレッド2
1) c = 10  1) c = 10
2) c += 1  2) c += 1
3) c = 11 をストア
       3) c = 11 をストア
となる事がある
volatileは各1)2)3)をアトミックにしてくれるだけ
意味無いじゃんと思うかも知れないが、longやdoubleでは意味がはっきりするよ