c++ - 并发访问 Map C++ 中的不同键

标签 c++ multithreading dictionary concurrency race-condition

我有两个线程,其中一个线程“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/

相关文章:

java - 在 Java 动画中使用线程

python - 按升序对返回的字典中的值列表进行排序-Python

ios - 使用 reduce 填充 [String : [CGFloat]] dictionary from an object array

Java:我是否忽略了线程的要点? (线程内的对象)

C#变量新鲜度

python - 如果某个键的值不止一次,则从列表中删除该元素

c++ - WINAPI - 编译时出现错误 LNK2019、LNK2001、LNK1120。

C++ 多线程 : keep only one thread (other than the main thread) alive at a time

c++ - 在这种特殊情况下是否应该传递指针或非常量引用?

c++ - CPP 中的指针,对示例程序的混淆