我有两个线程,其中一个线程“A”将一个键 X 插入到映射中,并且该线程“A”经常修改同一个键 X。
在特定点,线程“A”完成对键 X 的修改,然后线程“B”将读取键“X”并从映射中删除键“X”。
当线程“B”读取和删除映射时,线程“A”将同时在映射中插入和写入一些其他键(不同的键 X)。
这样的话, map 需要同步吗?由于线程“B”确信键“X”已被线程“A”完全修改,并且不会再对键“X”进行并发修改。
最佳答案
是的,你需要同步。
插入和删除可以更改映射类的内部状态,这些状态可以与其他类似操作重叠(即使它们针对不同的键)。
当线程 A 更新对象时,您不需要锁定 map 。 Map 保证迭代器和对象指针在插入/删除时是稳定的,因此您的对象不会被触及。
关于c++ - 并发访问 Map C++ 中的不同键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32839569/