2012-02-11 370 views
6

我接收到错误:pthread_mutex_lock.c:62:__pthread_mutex_lock:断言`互斥 - > __数据.__所有者== 0' 失败

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

我不能发现其中的任何原因。但是我不知道下面的代码:

声明:

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

锁&的顺序解锁:

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

cond.wait(lk); 

lock.unlock(); 

如果我删除此序列 - 一切工作正常,但没有任何保护。我不确定我是否正确使用unique_lock

+2

未来,请尝试发布简短但完整的程序 - http://sscce.org/ :) – 2012-02-11 13:13:30

回答

2

std::unique_lock和其他锁在构造函数中获取互斥锁并在析构函数中释放它。 您手动在代码中调用了lock.unlock(),使其有效地被调用两次。

删除该语句后,您的代码应该正常工作。

+3

或者,调用'lk.unlock()',以便锁知道互斥锁已解锁。 (也许除了“锁定”之外调用互斥锁,所以你不要把它与锁相混淆)。 – 2012-02-11 13:16:32