volatileはコンパイラがマシン語生成するときに働くキーワードで、
メモリバリアはCPUがマシン語を実行するときに働くもの。
使いどころが違うと思うんだが。
VC6で別スレッドの変数がなかなか変わらないのは大抵volatileが原因。