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

标签 c++ multithreading pthreads c++11

我收到了那个错误:

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

最佳答案

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

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

关于c++ - pthread_mutex_lock.c :62: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9239999/

相关文章:

c++ - 接收所有使用 C 套接字发送的数据

c++ - 为什么这个 shared_ptr 代码会出现段错误? shared_ptr 什么时候免费?

c++ - 以局部变量为参数的 pthread_create

c - pthread fork 和 exec

c++ - 为什么这个 C++ 代码可以编译?它有什么作用?

c++ - 使用 C++ 和 Visual Studio 的 Linux 应用程序

java - 在方法中使用 'var' 是否会使执行(并发)线程不安全?

Java 线程 - 按顺序调用线程

objective-c - iPhone 在异步 URL 请求中使用互斥体

linux - Linux 进程的堆栈大小与 pthread、fork 和 exec 有何关系