В С++ 11 была представлена библиотека шаблонов std::atomic<>
. Стандарт определяет операции store()
и load()
для атомарного набора/получения переменной, разделяемой более чем одним потоком.
Мой вопрос в том, что операции присваивания и доступа также являются атомарными?
А именно:
std::atomic<bool> 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;
}