c++ - 我必须明确调用原子加载/存储吗?

标签 c++ c++11 atomic stdatomic

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 Tatomic<T>::operator=相当于atomic<T>::loadatomic<T>::store分别。所有运算符都在原子类中实现,因此它们将使用您所期望的原子操作。

我不确定您所说的“非引用”类型是什么意思?不确定引用类型在此处的相关性。

关于c++ - 我必须明确调用原子加载/存储吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18850752/

相关文章:

c++ - 将 MPI_Op_create 与外部库函数(例如 boost 或 GS​​L)结合使用

c++ - C/C++ 中的结构赋值是原子的吗?

c++ - CUDA 中的 64 位 atomicAdd

c++ - 计算快速排序中的比较次数

c++ - 开始物理模拟

c++ - 为什么我的 std::unordered_map 访问时间不是常量

c++ - 错误 : no matching function for call to ‘std::vector<std::vector<int>>::push_back(std::vector<std::__cxx11::basic_string<char>>&)’

c++ - 为什么要在这里调用复制构造函数?

c++ - Effective placement of lock_guard - 来自 Effective Modern C++ 的第 16 条

c++ - 为什么 Direct3D 没有自己的顶点结构?