Я пытаюсь использовать мьютекс для синхронизации выполнения нескольких методов в разных потоках.
Я создаю класс Bar, который содержит метод foo и атрибут mutex.
Затем я хочу запустить этот метод foo в потоке.
Я не понимаю, почему это проблема, и следующий код не компилируется? И как это исправить? Любая помощь приветствуется.
#include <thread>
#include <mutex>
class Bar
{
public:
Bar (){};
void foo(){};
std::mutex m_;
};
int main(void)
{
Bar b;
std::thread t(&Bar::foo, b);
return 0;
}
Я получаю следующие ошибки:
include/c++/7.3.0/thread:256:11: error: no matching constructor for initialization of '__decayed_tuple<void (Bar::*)(), Bar &>' (aka 'std::tuple<void (Bar::*)(), Bar>')
return { __decayed_tuple<_Callable, _Args...>{
и
include/c++/7.3.0/tuple:133:4: error: call to implicitly-deleted copy constructor of 'Bar'
: _M_head_impl(std::forward<_UHead>(__h)) { }