要声明一个类型为 std::vector<std::atomic<float>>
的原子向量,并对其进行初始化和使用,你可以按照以下方式进行操作:
#include <iostream>
#include <vector>
#include <atomic>
int main() {
std::vector<std::atomic<float>> data;
// 初始化原子向量,添加初始元素
data.push_back(1.0f);
data.push_back(2.0f);
data.push_back(3.0f);
// 在不同线程中对原子向量的元素进行操作
std::thread t1([&]() {
data[0] += 10.0f;
});
std::thread t2([&]() {
data[1] *= 2.0f;
});
t1.join();
t2.join();
// 打印原子向量中的元素
for (const auto& value : data) {
std::cout << value << " ";
}
return 0;
}
在上述代码中,我们使用了 <atomic>
头文件提供的 std::atomic
类型来包装 float
元素。这样可以保证在多线程环境下对原子变量的操作是原子的。
我们首先通过调用 push_back
方法将初始值添加到原子向量中。然后,在两个不同的线程中修改了向量的不同元素:一个线程将第一个元素增加10,另一个线程将第二个元素乘以2。
最后,我们遍历打印了原子向量中的每个元素的值。
请注意,在使用原子类型时,需要遵循适当的同步机制,例如互斥锁或原子操作函数(如 fetch_add()
、fetch_sub()
等)。这取决于具体的操作和并发需求。
内容由零声教学AI助手提供,问题来源于学员提问