Из того, что я читал из Herb Sutter и others вы считаете, что volatile и параллельное программирование были полностью ортогональными понятиями, по крайней мере, до C/С++.
Однако в GCC реализация все функции-члены std::atomic имеют квалификатор volatile. То же самое верно в Anthony Williams реализация std::atomic.
Итак, что делать, нужны ли переменные atomic<> volatile или нет?