从不同线程访问 std::map
Access std::map from different threads
我读到 std::map
不是线程安全的。因此,如果我从不同的线程访问 (read/write) std::map
,我是否应该简单地将相关代码包装在关键部分中?
注意:我使用的是 Visual C++ 2010。
简单的回答:是的。但是如何正确地做到这一点可能很棘手。基本策略是在关键部分包装对 map
的调用,包括包装迭代器的生命周期。
但您还需要确保您的应用对地图的假设也得到谨慎处理。例如,如果您需要从地图中删除许多相关项目,请确保其他线程只容忍其中一些项目丢失,或者将整个批处理操作包装在 critsec 中。这很容易失控,因此您最终会在关键部分包装大量代码,这最终会导致死锁和性能下降。小心!
刚刚得到了同一个问题的同步 。
底线:使用 read/write 锁。
我读到 std::map
不是线程安全的。因此,如果我从不同的线程访问 (read/write) std::map
,我是否应该简单地将相关代码包装在关键部分中?
注意:我使用的是 Visual C++ 2010。
简单的回答:是的。但是如何正确地做到这一点可能很棘手。基本策略是在关键部分包装对 map
的调用,包括包装迭代器的生命周期。
但您还需要确保您的应用对地图的假设也得到谨慎处理。例如,如果您需要从地图中删除许多相关项目,请确保其他线程只容忍其中一些项目丢失,或者将整个批处理操作包装在 critsec 中。这很容易失控,因此您最终会在关键部分包装大量代码,这最终会导致死锁和性能下降。小心!
刚刚得到了同一个问题的同步