std::atomic

2019-04-19

std::atomic

看到有人讨论atomic是不是lockfree的

测试实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <utility>
#include <atomic>
#include <memory>

struct A { int a[4]; };
struct B { int x, y; };
struct C { std::shared_ptr<int> p; };
struct D { int a[5]; };

int main()
{
std::atomic<A> a;
std::atomic<B> b;
std::atomic<C> c;
std::atomic<D> d;
std::cout << std::boolalpha
<< "std::atomic<A> is lock free? "
<< std::atomic_is_lock_free(&a) << '\n'
<< "std::atomic<B> is lock free? "
<< std::atomic_is_lock_free(&b) << '\n'
<< "std::atomic<C> is lock free? "
<< std::atomic_is_lock_free(&c) << '\n'
<< "std::atomic<D> is lock free? "
<< std::atomic_is_lock_free(&d) << '\n';
}

g++ a.cpp -std=gnu++11 -latomic

1
2
3
4
std::atomic<A> is lock free? true
std::atomic<B> is lock free? true
std::atomic<C> is lock free? true
std::atomic<D> is lock free? false