std::atomic<>
是 C++11 引入的模板类,用于实现多线程环境下的原子操作。以下是用法示例及 store()
和 exchange()
的功能说明:
1. 基本用法示例
#include <atomic>
#include <iostream>
#include <thread>
std::atomic<int> counter(0); // 原子整型变量
void increment() {
for (int i = 0; i < 1000; ++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: " << counter.load() << std::endl; // 输出结果
return 0;
}
2. store()
方法
- 功能:原子地写入值到
atomic
对象。 - 参数:
val
:要写入的值。order
:内存顺序(默认为std::memory_order_seq_cst
)。
- 示例:
std::atomic<bool> flag(false);
flag.store(true, std::memory_order_release); // 原子写入 true
3. exchange()
方法
- 功能:原子地交换值,并返回旧值。
- 参数:
val
:要设置的新值。order
:内存顺序(默认为std::memory_order_seq_cst
)。
- 示例:
std::atomic<int> value(10);
int old_value = value.exchange(20); // value=20,返回旧值10
4. 关键区别
方法 | 功能 | 返回值 |
---|---|---|
store() |
仅更新值,不返回旧值 | void |
exchange() |
更新值并返回旧值 | T(旧值) |
5. 内存顺序选项
std::memory_order_relaxed
:无同步或顺序约束(仅保证原子性)。std::memory_order_release
/acquire
:实现线程间同步。std::memory_order_seq_cst
(默认):全局严格顺序。
通过合理使用这些方法,可以避免多线程竞争问题,确保数据操作的原子性和可见性。
内容由零声教学AI助手提供,问题来源于学员提问