从不同线程访问 std::map

Access std::map from different threads

我读到 std::map 不是线程安全的。因此,如果我从不同的线程访问 (read/write) std::map,我是否应该简单地将相关代码包装在关键部分中?

注意:我使用的是 Visual C++ 2010。

简单的回答:是的。但是如何正确地做到这一点可能很棘手。基本策略是在关键部分包装对 map 的调用,包括包装迭代器的生命周期。

但您还需要确保您的应用对地图的假设也得到谨慎处理。例如,如果您需要从地图中删除许多相关项目,请确保其他线程只容忍其中一些项目丢失,或者将整个批处理操作包装在 critsec 中。这很容易失控,因此您最终会在关键部分包装大量代码,这最终会导致死锁和性能下降。小心!

刚刚得到了同一个问题的同步 。 底线:使用 read/write 锁。