Должен ли я явно вызывать атомную загрузку / хранение?

C ++ 11 представилstd::atomic библиотека шаблонов. Стандарт определяетstore() а такжеload() операции для атомарной установки / получения переменной, совместно используемой несколькими потоками.

Мой вопрос - это операции присваивания и доступа тоже атомарные?

А именно, это:

std::atomic stop(false);
...
void thread_1_run_until_stopped()
{
    if(!stop.load())
        /* do stuff */
}

void thread_2_set_stop()
{        
    stop.store(true);
}

Эквивалентно:

void thread_1_run_until_stopped()
{
    if(!stop)
        /* do stuff */
}

void thread_2_set_stop()
{        
    stop = true;
}

Ответы на вопрос(2)

Ваш ответ на вопрос