C++多线程
C++的atomic
库和thread
库是多线程编程中常用的库,提供了安全的并发操作支持。
1. thread
库
2. atomic
库
<atomic>
库主要提供了原子操作(atomic operations),即无需锁机制即可实现的线程安全操作。这对提高多线程环境下的数据一致性和性能很有帮助。
常见的原子类型
std::atomic<T>
:提供一种基础原子类型,T
可以是整型、指针等。常见类型如std::atomic<int>
、std::atomic<bool>
等。std::atomic_flag
:最简单的原子布尔类型,适用于实现简单的锁(如自旋锁)。
原子操作的基本方法
store(value)
:原子地存储一个值。load()
:原子地加载一个值。exchange(value)
:原子地将变量的值设置为value
,并返回先前的值。compare_exchange_strong(expected, desired)
和compare_exchange_weak(expected, desired)
:原子比较并交换操作,根据当前值与expected
是否相等决定是否替换为desired
。fetch_add(value)
、fetch_sub(value)
、fetch_or(value)
等:执行加、减、或等操作并返回旧值。
原子变量的示例
#include <iostream>
#include <atomic>
#include <thread>
std::atomic<int> counter(0);
void increment() {
for (int i = 0; i < 1000; ++i) {
counter.fetch_add(1); // 原子增加操作
}
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout << "Final counter value: " << counter.load() << std::endl;
return 0;
}