<分区>
我正在编写监视器以相互排除对 std::list
的方法的访问
我现在拥有的基本上是这样的:
<pre><code>list<int> l;
class monitor{
public:
void m_add(int x){
//lock use of m_remove
//lock use of m_add
l.push_back(x);
//unlock use of m_add
//unlock use of m_remove
}
void m_remove(int x){
//lock use of m_remove
//lock use of m_contains
//lock use of m_add
l.remove(x);
//unlock use of m_add
//unlock use of m_contains
//unlock use of m_remove
}
bool m_contains(int x){
//lock use of m_remove
bool found = find(l.begin(), l.end(), x) != l.end();
//unlock use of m_remove
return found;
}
private:
mutex mtx_remove;
mutex mtx_add;
mutex mtx_contains;
};
</code></pre>
在 main 函数中,我创建了一个线程来运行 add 函数,例如thread t(m.m_add, 1);
我得到了错误
error: invalid use of non-static member function
我明白(通过查看这里的其他答案)我应该按照 thread t(&monitor::m_add, 1);
中的方式运行线程并将所有方法声明为静态的,但我需要实例化 monitor
的对象为了创建互斥量(或锁,或其他)并使它们在 main 的范围内私有(private)。
对于这种情况,最合适的解决方案是什么?如果锁只能在监视器类的范围内访问,那会很有趣(顺便说一下,我也打算将来把 list<int> l
放在监视器类中。)