我正在编写一个监视器来相互排除对 a 方法的访问std::list
我现在拥有的基本上是这样的:
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;
};
在 main 函数中,我创建了一个线程来运行 add 函数,例如thread t(m.m_add, 1);
,我得到了错误
error: invalid use of non-static member function
我知道(通过查看此处的其他答案)我应该像 in 一样运行线程thread t(&monitor::m_add, 1);
并将所有方法声明为静态,但我需要实例化一个对象monitor
以创建互斥锁(或锁或其他)并制作它们在 main 的范围内是私有的。
这种情况下最合适的解决方案是什么?如果锁只能在监视器类的范围内访问会很有趣(顺便说一句,我还打算list<int> l
将来把它放在监视器类中。)