1
14
您可以安全地执行同时读取操作,即调用const成员函数。但是,如果其中一个涉及到写入操作,则不能同时执行任何操作,即非常量成员函数的调用对于容器来说应该是唯一的,并且不能与任何其他调用混合。 也就是说,不能从多个线程更改容器。所以你需要使用lock/rw锁 以确保通道安全。 |
2
4
不。 诚实的。不。 编辑 好的,我来鉴定一下。 可以有任意数量的线程读取同一映射。这是有道理的,因为阅读它没有任何副作用,所以其他人是否也在做它并不重要。 但是,如果您想写入它,那么您需要获得独占访问权,这意味着阻止任何其他线程写入 或 阅读直到你完成。 您最初的问题是关于并行添加和删除。因为它们都是写的,所以对于它们是否是线程安全的答案是一个简单、明确的“否”。 |
3
4
tbb是一个免费的开放源码库,提供线程安全的关联容器。( http://www.threadingbuildingblocks.org/ ) |
4
2
|
5
0
答案(像大多数线程问题一样)是它大多数时候都能工作。不幸的是,如果你在地图调整大小时捕捉到它,那么你最终会遇到麻烦。所以没有。 要获得最佳性能,您需要一个多级锁。首先是一个读锁,它允许访问器不能修改映射,并且可以由多个线程持有(多个线程读取项正常)。其次是一个独占的写锁,它允许以不安全的方式(添加、删除等)修改映射。 编辑 读写器锁很好,但是它们是否优于标准互斥锁取决于使用模式。我也不能不了解更多就推荐。同时分析两者,看看哪一个最适合你的需要。 |
Julia · 矢量中相加为总和S的值的数量 1 年前 |
C_Rod · 在模板方法中确定STL容器中项目的数据类型 2 年前 |
quantumwell · 将空向量放入std::map() 6 年前 |
OutOfBound · 对未初始化内存使用算法的优点 6 年前 |
DarthRubik · 在使用列表删除之后,迭代器如何不无效 6 年前 |