Он не гарантирует, что совсем никаких оптимизацией нет. Но он гарантирует, что все записи сделанные под мутексом в одном потоке, будут видны в другом. (я даже доказал это ссылками на memory model). Что касается оптимизаций: игры с компилятором в "угадай, что оптимизируется" никуда не приводят, потому что вы никогда не можете знать все оптимизации, которые умеет компилятор. В стандарте написано, что может вернуть чтение переменной, и при каких условиях оно гарантированно может вернуть только одно "последнее" записанное значение. Этим и надо пользоваться, а думать, что компилятор оптимизирует - это уже гадание.