标签: 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的结果相同。
map[id]="something"
id.fetch_add
答案 0 :(得分:5)
你不能。
id的原子性不会阻止其他线程增加您的fetch_add调用与map[id]分配/插入之间的值。
id
fetch_add
map[id]
使用mutex来保护整个部分。
通过使用互斥锁,您还可以防止访问地图的数据争用。