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