std::atomic 使用
时间: 2023-07-02 20:09:41 浏览: 96
std::atomic 是 C++11 中引入的一个原子类型,用于对共享变量进行原子操作,从而避免多线程并发访问时的竞态条件,保证了程序的正确性。
std::atomic 可以用于对任意可复制的数据类型进行原子操作,包括内置类型(如 int、bool 等)和自定义类型。它提供了一些成员函数,如 load、store、exchange、compare_exchange_weak/strong 等,可用于实现读取、赋值、交换和比较并交换等操作。
下面是一个简单的示例,展示了如何使用 std::atomic 对共享的 int 变量进行原子操作:
```c++
#include <atomic>
#include <iostream>
#include <thread>
std::atomic<int> counter(0);
void increment() {
for (int i = 0; i < 10000; ++i) {
counter.fetch_add(1, std::memory_order_relaxed);
}
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout << "Counter value: " << counter << std::endl;
return 0;
}
```
在上面的代码中,我们定义了一个 std::atomic<int> 类型的变量 counter,并在两个线程中分别调用 increment 函数对其进行原子递增操作。最后输出 counter 的值,可以看到正确输出了 20000。
需要注意的是,std::atomic 并不能完全解决多线程同步的问题,它只能保证对共享的变量进行原子操作时的线程安全性,而不能保证一个线程的操作对其他线程的可见性。因此,在实际开发中,还需要结合其他同步机制(如互斥锁、条件变量等)来保证程序的正确性。
阅读全文