我找到了以下代码,输出总是:

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';
}

我不明白第二个 struct 专用原子类型如何是无锁的,而第一个专用原子类型不能是无锁的?

提前致谢。

最佳答案

http://en.cppreference.com/w/cpp/atomic/atomic_is_lock_free 真的在评论区解释了。内存对齐和寄存器大小可能允许以原子方式处理 2 个打包整数。换句话说,在具有 128 位寄存器的 64 位系统上,2 个对齐的整数与单个 long long 没有区别。

关于c++ - struct 专用原子类型如何是无锁的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46007741/

10-13 08:34