Search code examples
c++multithreadingpthreadsc++11

pthread_mutex_lock.c:62: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed


I received that error:

pthread_mutex_lock.c:62: __pthread_mutex_lock: Assertion `mutex->_data._owner == 0' failed.

And I cannot found any cause of that. However I'm not sure about the following piece of code:

Declarations:

std::mutex lock;
std::condition_variable cond;

Sequence of locks & unlocks:

std::unique_lock<std::mutex> lk(lock);

cond.wait(lk);

lock.unlock();

If I remove this sequence - everything works fine, but without any protection. I'm not sure if I use unique_lock properly.


Solution

  • std::unique_lock and other locks acquire a mutex in the constructor and release it in the destructor. You called lock.unlock() in your code manually, making it called effectively twice.

    After removing that statement your code should work properly.