看来std::atomic
类型没有拷贝构造或复制分配。 为什么?
是否有技术原因,复制原子类型是不可能的? 或在接口上限制的目的,以避免某种恶意代码?
看来std::atomic
类型没有拷贝构造或复制分配。 为什么?
是否有技术原因,复制原子类型是不可能的? 或在接口上限制的目的,以避免某种恶意代码?
技术原因:大多数原子类型,但不保证无锁的。 原子类型的表示可能需要包含嵌入的互斥量和互斥是不可拷贝。
合乎逻辑的理由:会是什么意思复制一个原子类型? 将整个复制操作预计是原子? 将副本和原代表相同的原子对象?
有没有一个操作跨越两个单独的原子对象,这将使这项有意义的定义明确的含义。 有一件事你能做的就是把从一个原子对象加载到另一个值。 但负载仅直接与原物体上的其他操作同步,而存储与目标对象上的操作同步。 而且每个部分都配有完全独立的内存排序约束。
拼写出这样的操作负荷,接着一个店做的是明确的,而分配会留下一个不知道它是如何与参与对象的内存访问性能。 如果硬要,就可以实现通过组合的现有转化类似的效果std::atomic<..>
要求显式的转换或其它中间值类型)。
。
在没有原子操作平台(或不为所有整数尺寸原子指令)的类型可能需要包含一个互斥体,以提供原子。 互斥一般不能够复制或移动。
为了保持一致的接口为所有专业std::atomic<T>
在所有平台上,该类型是从来没有能够复制。