【发布时间】:2016-01-21 21:28:28
【问题描述】:
我正在寻找线程安全映射的解决方案,但包括 tbb,所有内容库对于擦除、清除功能都不是线程安全的。由于性能问题,我不想使用互斥锁。我正在互联网上搜索它很长一段时间,但我仍然找不到任何关于此的示例,而且我对长篇文章的英语不好。我搜索了很多东西,比如 const 对于 c++11 是线程安全的,但我无法弄清楚。
我试过这个来复制地图,但它也不是线程安全的。
__forceinline ActiveMap & GetActiveMap() { return m_activeCollection; }
当我尝试在另一个线程中复制地图时,此代码崩溃。
【问题讨论】:
-
你错了,
tbb::concurrent_hash_map::erase是线程安全的 -
整个容器操作,如赋值或复制不是线程安全的。您可以使用
tbb::spin_rw_lock来保护它以便拍摄快照
标签: c++ multithreading c++11 tbb