C++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;
}
最佳答案
Are assignment and access operations for non-reference types also atomic?
是的,他们是。 atomic<T>::operator T
和 atomic<T>::operator=
相当于atomic<T>::load
和 atomic<T>::store
分别。所有运算符都在原子类中实现,因此它们将使用您所期望的原子操作。
我不确定您所说的“非引用”类型是什么意思?不确定引用类型在此处的相关性。
关于c++ - 我必须明确调用原子加载/存储吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18850752/