将监视器方法作为线程参数传递 c++

Passing monitor method as thread parameter c++

我正在编写监视器以相互排除对 std::list 方法的访问 我现在的基本上是这样的:

</p> <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; };

在 main 函数中我创建了一个线程到 运行 添加函数,例如thread t(m.m_add, 1); 我收到错误

error: invalid use of non-static member function

我明白(通过查看这里的其他答案)我应该 运行 中的线程 thread t(&monitor::m_add, 1); 并将所有方法声明为静态的,但我需要实例化 运行 的对象=15=] 以创建互斥体(或锁,或其他)并使它们在 main 的范围内私有。

对于这种情况,最合适的解决方案是什么?如果锁只能在监视器 class 的范围内访问,那会很有趣(顺便说一句,我也打算将来把 list<int> l 放在监视器 class 中。 )

你的线程函数必须是静态的。要从线程访问成员函数,请在创建对象时将指向对象的指针传递给线程函数。