为什么std :: atomic 无法交换?

问题描述 投票:4回答:2
#include <atomic>

int main()
{
    auto a = std::atomic_int(1);
    auto b = std::atomic_int(2);

    std::swap(a, b); // error
}

错误消息:

错误:没有匹配函数调用'swap(std :: atomic&,std :: atomic&)'

为什么不能交换std::atomic<T>

c++ c++11 std standards atomicity
2个回答
4
投票

该问题有两个层次。

首先是简单而又简单的技术-std::atomic不能像其他答案中提到的那样可移动或可分配。

第二是其背后的原理-交换std::atomic本身并不是原子的。并且由于std::atomic用于多线程环境中,所以由于可能的误解(由于[C​​0]有swap,所以它本身是原子的),因此添加swap会导致大量错误。

全部-如果您不需要原子std::atomic,可以使用提到的swap轻松完成。


5
投票

[exchange具有已删除的副本构造函数,并且没有移动构造函数。

© www.soinside.com 2019 - 2024. All rights reserved.