我找到了以下代码,输出总是:
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/