我有两个线程,其中一个线程"A“将一个键X插入到映射中,而该线程"A”经常修改相同的键X。
在特定点,线程"A“完成对键X的修改,然后线程"B”将读取键"X“,并从地图中删除键"X”。
当线程"B“读取和删除映射时,线程"A”将同时在映射中插入和写入其他一些键(不是相同的键X)。
在这种情况下,映射需要同步吗?由于线程"B“确信键"X”被线程"A“完全修改,因此将不再对该键"X”进行并发修改。
发布于 2015-09-29 02:05:11
是的你需要同步。
插入和删除可以更改映射类的内部状态,这种状态可以与其他类似操作重叠(即使它们是针对不同的键)。
当线程A更新对象时,不需要锁定映射。Map保证迭代器和对象指针在插入/删除下是稳定的,这样您的对象就不会被触摸。
https://stackoverflow.com/questions/32839569
复制