Map C ++

时间:2015-09-29 08:43:12

标签: c++ multithreading dictionary concurrency race-condition

我有两个线程,其中一个线程“A”将一个键X插入到地图中,同一个键X经常被该线程“A”修改。

在特定点,线程“A”完成对该键X的修改,然后线程“B”将读取键“X”并从地图中删除键“X”。

当线程“B”读取并删除地图时,线程“A”将同时插入并写入地图中的其他一些键(不是同一个键X )。

在这种情况下,地图是否需要同步?由于线程“B”确定密钥“X”被线程“A”完全修改,并且不再对该密钥“X”进行并发修改。

1 个答案:

答案 0 :(得分:2)

是的,您需要同步。

插入和删除可以更改可以与其他类似操作重叠的地图类的内部状态(即使它们用于不同的键)。

当线程A更新对象时,您不需要锁定地图。 Map保证迭代器和对象指针在插入/删除时是稳定的,因此您的对象不会被触及。