std::atomic
时间: 2023-07-15 09:08:39 浏览: 121
线程安全的std :: map和无锁映射的速度
std::atomic是C++11引入的一个模板类,于在多线程环境下进行原子操作。它提供了一种线程安全的方式来访问和修改变量,避免了数据竞争和并发访问的问题。
使用std::atomic,可以对基本数据类型(如整数、指针等)进行原子操作,包括加载、存储、交换、比较和交换等。它保证了这些操作的原子性,即在多线程环境下,这些操作要么全部执行成功,要么全部不执行。
例如,可以使用std::atomic来实现一个计数器,多个线程可以同时对其进行自增操作,而不会出现竞争条件。示例代码如下:
```cpp
#include <atomic>
#include <iostream>
#include <thread>
std::atomic<int> counter(0);
void increment() {
for (int i = 0; i < 100000; ++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;
}
```
在上述代码中,我们创建了两个线程t1和t2,它们会同时对counter进行100000次自增操作。由于std::atomic保证了自增操作的原子性,所以最终输出的counter值会是200000,而不会出现竞争条件导致的不确定结果。
总之,std::atomic是C++中用于实现原子操作的重要工具,它在多线程编程中起到了关键作用。
阅读全文