C++ 中的 std::atomic
类型不直接支持容器类型,例如 std::atomic<std::vector<float>>
是无效的。std::atomic
通常用于原子操作单个值。
如果你需要在多线程环境下对一个 vector 进行原子操作,可以考虑使用其他同步机制,如互斥锁 (std::mutex
) 或读写锁 (std::shared_mutex
) 来确保线程安全。以下是一个示例代码:
#include <iostream>
#include <vector>
#include <mutex>
int main() {
std::vector<float> data;
std::mutex mtx;
// 向 vector 添加元素(在临界区内进行)
{
std::lock_guard<std::mutex> lock(mtx);
data.push_back(1.0);
data.push_back(2.0);
data.push_back(3.0);
}
// 打印 vector 中的元素
for (const float& value : data) {
std::cout << value << " ";
}
return 0;
}
在上述代码中,我们使用了互斥锁 (std::mutex
) 来确保向 data
向量添加元素时的线程安全性。通过创建 std::lock_guard<std::mutex>
对象并将其传递给互斥锁,在临界区内锁定和解锁互斥锁。
这样可以避免多个线程同时修改向量导致数据竞争问题。
内容由零声教学AI助手提供,问题来源于学员提问