如何通过原子保证数据依赖性?

时间:2019-05-17 11:20:12

标签: 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的结果相同。

1 个答案:

答案 0 :(得分:5)

你不能。

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

使用mutex来保护整个部分。

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