在 C++ 中,使用 std::atomic<int>
来定义一个原子整数时,你不能直接将其初始化为普通整数(如 0
),因为这样会导致编译错误。正确的初始化方式是通过构造函数或使用 store
方法。
正确的初始化方式
- 使用构造函数:
#include <atomic>
std::atomic<int> atomic_int(0); // 使用构造函数初始化
- 先声明,再赋值:
如果你已经声明了一个 std::atomic<int>
变量,可以后续使用 store
方法来设置初始值:
#include <atomic>
std::atomic<int> atomic_int; // 声明但未初始化
atomic_int.store(0); // 使用 store() 方法进行初始化
示例代码
下面是一个简单的示例,展示如何正确地定义和使用 std::atomic<int>
:
#include <iostream>
#include <thread>
#include <vector>
#include <atomic>
std::atomic<int> atomic_int(0); // 正确的初始化方式
void increment(int times) {
for (int i = 0; i < times; ++i) {
atomic_int.fetch_add(1); // 安全递增计数器
}
}
int main() {
const int numThreads = 10;
const int incrementsPerThread = 1000;
std::vector<std::thread> threads;
// 启动多个线程来增加计数器
for (int i = 0; i < numThreads; ++i) {
threads.emplace_back(increment, incrementsPerThread);
}
// 等待所有线程完成工作
for (auto& t : threads) {
t.join();
}
std::cout << "Final counter value: " << atomic_int.load() << std::endl;
return 0;
}
在这个例子中,我们创建了一个原子整数 atomic_int
,并让多个线程同时对它进行递增操作。最终输出保证是线程安全的,因为我们使用了 std::atomic
来处理共享数据。
内容由零声教学AI助手提供,问题来源于学员提问