cpp11的 std::atomic
时间: 2023-05-30 18:06:08 浏览: 146
std::atomic 是 C++11 引入的一个原子类型,用于在多线程编程中实现线程安全的操作。std::atomic 提供了一组原子操作函数,可以保证对其进行操作时,不会发生竞争条件。
std::atomic 可以用于任何基本数据类型(如 int、float、double 等)和用户自定义类型。对 std::atomic 类型进行操作时,可以使用一系列的原子操作函数,如 load、store、exchange、compare_exchange_weak、fetch_add、fetch_sub 等等。
std::atomic 的使用非常简单,只需要在定义时加上 atomic 关键字即可,例如:
```
std::atomic<int> value(0);
```
这里定义了一个 int 类型的 std::atomic 对象 value,初始值为 0。
接下来,我们可以使用 std::atomic 提供的原子操作函数对 value 进行操作,例如:
```
// 原子地将 value 加 1
value.fetch_add(1);
// 原子地比较 value 是否等于 0,如果等于,则将 value 设为 1
value.compare_exchange_weak(0, 1);
```
需要注意的是,std::atomic 可以保证单个操作的原子性,但不能保证多个操作的原子性。例如,下面的代码并不能保证 increment() 函数的原子性:
```
std::atomic<int> value(0);
void increment() {
value++;
}
```
因为 value++ 等价于 value.fetch_add(1),而 fetch_add() 函数只能保证单个操作的原子性。
如果需要保证多个操作的原子性,可以使用 std::mutex 或 std::lock_guard 等线程同步机制。
阅读全文