c++ - 如何用原子性保证数据依赖?

标签 c++

如何用c++原子保证数据依赖?

我想在多线程的映射中添加一些东西,我使用atomic_uint64_t作为指示器。 在每一个添加步骤中,指标++。

atomic_uint64_t id;
id.fetch_add(1,memory_order_relaxed);
map[id] = "something";

如何保证map[id]="something"中的id与id.fetch_add的结果相同。

最佳答案

你不能。

id 的原子性不会阻止其他线程增加 fetch_add 调用和 map[id] 赋值之间的值/插入。

使用 mutex而是保护整个部分。

通过使用互斥体,您还可以防止 map 访问的数据争用。

关于c++ - 如何用原子性保证数据依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56185373/

相关文章:

c++ - 从 boost::threads 到 boost::asio 计时器

c++ - 通过在函数调用中构造的引用传递对象

c++ - 如何以 lambda 作为第一个参数覆盖可变参数模板?

c++ - 简单 QSsl 客户端/服务器 : cannot start handshake on non-plain connection

C++ 为什么我的示例程序不能创建输出文件?

c++ - C++中的指针赋值

C++如何定义嵌套类中的运算符

c++ - 通过直接连接或排队连接调用插槽的 QTimer 超时插槽有什么区别?

c++ - 如何将字符数组复制到剪贴板?

c++ - 没有或有静态设备上下文的 OpenGL 加载纹理?