从两个线程访问锁定映射和向量

Posted

技术标签:

【中文标题】从两个线程访问锁定映射和向量【英文标题】:Lock map and vector from accessing from two threads 【发布时间】:2013-01-21 13:25:33 【问题描述】:

我有两个线程,每个线程都有一个操作相同 std:map 和 std:vector 变量的函数。

保留这些变量的最佳方法是什么。

谢谢

【问题讨论】:

What have you tried? 另外,标准库thread support 中有很多有用的类。 这也有助于了解您正在使用什么系统和库。 【参考方案1】:

这取决于操作的类型。你是只覆盖存储的值,还是插入/删除元素?在前一种情况下,您只能锁定容器的特定元素(例如,通过在每个元素中嵌入std::mutex),而在后一种情况下,您需要在每次操作期间锁定整个容器。

【讨论】:

【参考方案2】:

没有通用的最佳方法。您需要通过一个相应地锁定/解锁互斥锁的函数来清理对同步结构的所有读/写调用。您可能有多个函数,但它们都应该在同一个公共互斥体上运行。

最好有一个存储类,并将map和vector作为私有成员变量。并在该类中编写锁定/解锁互斥锁并将读/写调用转发到实际映射或向量的转发函数。那么您访问实际结构的门数量有限。并且会更容易管理。

您可以使用boost::mutex 作为该类的成员变量。

【讨论】:

以上是关于从两个线程访问锁定映射和向量的主要内容,如果未能解决你的问题,请参考以下文章

如果我们同时从向量中追加和读取数据,我们是不是需要锁定?(无修改)

当两个锁定线程(通过变量),切换其中一个变量并尝试访问另一个变量时会发生什么?

软件构造 并发3(线程安全性)----锁定和同步

在同一个线程中多次锁定 CCriticalSection 是好的做法吗?

无法使用 QMutex 锁定变量

无锁定的多个矢量编写器