【发布时间】:2015-09-29 08:43:12
【问题描述】:
我有两个线程,其中一个线程“A”向映射中插入一个键 X,并且该线程“A”经常修改同一个键 X。
在某个特定点,线程“A”完成了对该键 X 的修改,然后线程“B”将读取键“X”并从映射中删除键“X”。
当线程“B”读取和删除映射时,线程“A”将同时在映射中插入和写入一些其他键(不是同一个键X)。
在这种情况下,地图需要同步吗?由于线程“B”确定键“X”已被线程“A”完全修改,因此不会再对该键“X”进行并发修改。
【问题讨论】:
-
看看这个SO answer。您会注意到删除/重新分配可能会导致数据竞争。 IMO,您应该考虑使用
tbb::concurrent_hash_map。 -
我不是在谈论删除另一个线程正在处理的相同键。我正在删除一个将不再处理的键,而其他键插入正在映射中发生。
-
是的;删除一个键可能会以影响其他键查找的方式修改映射。
标签: c++ multithreading dictionary concurrency race-condition