Generally volatile is used to prevent the compiler from reordering reads and writes, but we don't assume that volatile implies a memory barrier. We could probably switch to /volatile:iso.