hi there,
consider this simple class (shown below)
It's just a callable functor class, implementing the func. call operator.
I find that when i declare a mutex inside this class, the compiler curses me...
.. uttering words like:
/usr/include/justthread/mutex: In copy constructor ‘functor::functor(const functor&)’:
threadId.cxx:19: instantiated from ‘__jss::__0x::__invoker<_ResultType, _Callable, _Args>::__invoker(_Callable&, const __jss::__0x::__args_tuple<_OtherArgs ...>&) [with _OtherArgs = , _ResultType = void, _Callable = functor&, _Args = ]’
When i make the mutex global (line 17).. the code compiles and runs as expected.
I also tried wrapping the mutex in a unique_lock. But ... no joy.
Is it not possible to define a mutex as a class member ?
Any suggestions.. warmly welcomed
Rob.
17 // mutex m;
18
19 class functor {
20 mutex m;
21 // unique_lock<mutex> m;
22 public:
23 void operator()() {
24 int loopCtr = 0;
25 while (++loopCtr < 20){
26 getThreadId(loopCtr);
27 }
28 }
29 functor(){}
30 private:
31 void getThreadId(const int ctr){
32 m.lock();
33 try {
34 thread::id thisThread = this_thread::get_id();
35 cout << ctr << " - thisThread=" << thisThread << endl;
36 m.unlock();
37 } catch (...) {
38 m.unlock();
39 }
40 }
41 };