【问题标题】:pthread_mutex_lock.c:62: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failedpthread_mutex_lock.c:62: __pthread_mutex_lock: 断言 `mutex->__data.__owner == 0' 失败
【发布时间】:2012-03-03 15:26:43
【问题描述】:

我收到了那个错误:

pthread_mutex_lock.c:62: __pthread_mutex_lock: 断言 `mutex->_data._owner == 0' 失败。

我找不到任何原因。但是我不确定以下代码:

声明:

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

锁定和解锁的顺序:

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

cond.wait(lk);

lock.unlock();

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

【问题讨论】:

  • 未来,请尽量发布简短但完整的节目 - sscce.org :)

标签: c++ multithreading pthreads c++11


【解决方案1】:

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

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

【讨论】:

  • 或者,调用lk.unlock(),这样锁就知道互斥锁已被解锁。 (并且也许将互斥锁称为“锁”以外的其他名称,因此您不会将其与锁混淆)。
猜你喜欢
  • 1970-01-01
  • 2011-12-10
  • 2014-01-16
  • 2018-06-02
  • 2011-04-02
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 2019-07-11
相关资源
最近更新 更多