volatileはそのAとBの間に制約があるなら使えないし、A、Bが自身の制約になるときもか。あと他の変数の不変条件になってるなら使えないよ。
ていうかvolatile変数の変更が外から見えないならロックいらんだろ。