例如在我的Cygwin64、GCC7.3环境下执行如下代码:
#include <iostream>
#include <atomic>
#define N 8
struct A {
char a[N];
};
int main()
{
std::atomic<A> a;
std::cout << sizeof(A) << std::endl;
std::cout << a.is_lock_free() << std::endl;
return 0;
}
结果为:
8
1
证明上面定义的类型A的原子量是无锁的。我在这个平台上进行了实验,修改N的大小,结果如下:
| N | sizeof(A) | is_lock_free() |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 3 | 0 |
| 4 | 4 | 1 |
| 5 | 5 | 0 |
| 6 | 6 | 0 |
| 7 | 7 | 0 |
| 8 | 8 | 1 |
| > 8 | / | 0 |










