结构专业的原子类型如何免费锁定
How can the struct specialized atomic type be lock free?
我找到了以下代码,排名始终是:
std::atomic<A> is lock free? false
std::atomic<B> is lock free? true
这是代码:
struct A { int a[100]; };
struct B { int x, y; };
int main()
{
std::cout << std::boolalpha
<< "std::atomic<A> is lock free? "
<< std::atomic<A>{}.is_lock_free() << 'n'
<< "std::atomic<B> is lock free? "
<< std::atomic<B>{}.is_lock_free() << 'n';
}
我不明白第二个结构专业的原子类型如何免费锁定,而第一个专业的原子类型不能免费锁定?
预先感谢。
http://en.cppreference.com/w/cpp/atomic/atomic_is_lock_free在评论部分中确实对此进行了解释。内存对准和寄存器尺寸可能允许以原子方式处理2个包装的INT。换句话说,2个对齐的INT与具有128位寄存器的64位系统上的单个长度不差异。
std::atomic
要求其模板参数是可以毫无复制的。也就是说,它知道(负载,存储等)在您的struct B
上操作只需复制字节,并且可以使用适当的原子说明进行操作,如果它们足够宽。
相关文章:
- 如何在cpp中删除(免费)多维结构内存?
- 存储在堆分配向量中的指针的免费存储
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- 应用地址清理器后,免费无效指针消失
- 为什么用绕道钩住堆免费对删除/免费不起作用?
- std::atomic中的任何内容都是免费等待的
- 免费图像写入像素
- 优点和缺点 在类内为大型项目定义的内联朋友助手免费函数
- 全球免费给出一个错误.调试器不解释
- 我应该只在免费商店上为一次调用创建对象吗?
- 由PostMessage发送的来自c++的C ++的免费HBITMAP
- 从命令行构建一个.sln / .vcxproj项目,并使用Visual C 的免费版本构建
- C++自动内存 malloc 和免费覆盖问题
- 使用线程和静音时,双免费或损坏(!prev)错误
- 使用lambda在功能指针铸造时双免费
- 将 C 样式字符串复制到免费存储上分配的内存中
- 我很难修复我认为是双重免费的东西
- Malloc,免费和多个指针,它是如何工作的
- 如何正确使用和免费的ASN1C sequence_of
- TBB免费图像lambda阵列比较错误