从两个线程访问锁定映射和向量
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
作为该类的成员变量。
【讨论】:
以上是关于从两个线程访问锁定映射和向量的主要内容,如果未能解决你的问题,请参考以下文章
如果我们同时从向量中追加和读取数据,我们是不是需要锁定?(无修改)
当两个锁定线程(通过变量),切换其中一个变量并尝试访问另一个变量时会发生什么?