Win2003 Server以上でMemoryBarrierというキャッシュのフラッシュのマクロがあるのだが、
それ未満のOS(マルチCPUやHyperThreadingなども含めて)ではスレッドの切り替え時には、
同期制御をして書き換えた部分も切り替え後に値が途中までしか変わっていない
ということが有り得るのでしょうか?

通常、小さい変数などはvolatileをつけるべきだってのは知っているのですが、
const_castでvolatileを変える仕様はMS VC7.1には入っていないし、
同期をかけるクラスはすべてvolatile版も作れということですかねぇ。