C++11中的原子量和内存序详解

2020-01-06 19:27:01于海丽

例如在我的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