结构专业的原子类型如何免费锁定

How can the struct specialized atomic type be lock free?

本文关键字:何免费 免费 锁定 类型 结构      更新时间:2023-10-16

我找到了以下代码,排名始终是:

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上操作只需复制字节,并且可以使用适当的原子说明进行操作,如果它们足够宽。