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

标签 c++ multithreading concurrency monitors

<分区>

我正在编写监视器以相互排除对 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 放在监视器类中。)

最佳答案

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

关于c++ - 将监视器方法作为线程参数传递 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50376991/

相关文章:

java - env->FindClass 函数返回 null

java - 边框格式在 thread.sleep() 之前未更新

c++ - 在 C++ 中使用线程调用具有多个参数的非静态函数

java - 并发和日历类

Java Swing 多线程和 ui 卡住

c++ - 对同一数据使用两个不同的结构

c++ - 模板类的 vector

c++ - 为什么没有 2 字节 float 并且已经存在实现?

Java 音频节拍器 |时间和速度问题

Java : threaded serial port read with Java. util.concurrent 线程访问