我有两个线程,每个线程都有一个操作相同std:map和std:vector变量的函数。
保留这些变量的最佳方法是什么。
由于
答案 0 :(得分:1)
这取决于操作的种类。您是否只覆盖存储的值,还是也插入/删除元素?在前一种情况下,您可以仅锁定容器的特定元素(例如,通过在每个元素中嵌入std::mutex
),而在后一种情况下,您需要在每次操作期间锁定整个容器。
答案 1 :(得分:0)
没有通用的最佳方式。您需要通过一个锁定/解锁互斥锁的功能来清理对同步结构的所有读/写调用。您可能有多个功能,但它们都应该在相同的公共互斥锁上运行。
最好有一个存储类,并将map和vector保持为私有成员变量。并在该类中编写转发函数来锁定/解锁互斥锁,并将读/写调用转发给实际的映射或向量。那么你进入实际结构的门数量有限。而且管理起来会更容易。
您可以使用boost::mutex
作为该类的成员变量。