我有两个线程,其中一个线程“A”将一个键X插入到地图中,同一个键X经常被该线程“A”修改。
在特定点,线程“A”完成对该键X的修改,然后线程“B”将读取键“X”并从地图中删除键“X”。
当线程“B”读取并删除地图时,线程“A”将同时插入并写入地图中的其他一些键(不是同一个键X )。
在这种情况下,地图是否需要同步?由于线程“B”确定密钥“X”被线程“A”完全修改,并且不再对该密钥“X”进行并发修改。
答案 0 :(得分:2)
是的,您需要同步。
插入和删除可以更改可以与其他类似操作重叠的地图类的内部状态(即使它们用于不同的键)。
当线程A更新对象时,您不需要锁定地图。 Map保证迭代器和对象指针在插入/删除时是稳定的,因此您的对象不会被触及。