从不同的线程访问std :: map

时间:2015-06-17 10:25:58

标签: c++ windows winapi

我已经读过std::map不是线程安全的。因此,如果我从不同的线程访问(读/写)std::map,我是否应该将相关代码包装在关键部分?

注意:我正在使用Visual C ++ 2010。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

同一个问题同时获得write。 底线:使用读/写锁。

相关问题