【问题标题】:What are pthread lock return code values?什么是 pthread 锁返回码值?
【发布时间】:2017-11-06 18:29:48
【问题描述】:

我正在尝试在我的可执行文件中使用 pthreads,但它在 mutex::lock() 调用时崩溃了。在调试器中,我看到 std_mutex.h 中发生了崩溃,其中对 __gthread_mutex_lock() 的调用返回了一个值为 22 的整数。

这是一个专有程序,因此我无法共享它,也无法在较小的程序上重现该问题。这个返回值表明我可能做错了什么?

【问题讨论】:

标签: c++ c++11 stl pthreads


【解决方案1】:

这里有一些检查的可能性:

  1. 该线程已持有锁。
  2. 锁从未正确初始化。
  3. 锁已被破坏。
  4. 锁被未持有的线程解锁。
  5. Lo​​ck 的内存被覆盖或损坏。
  6. Lo​​ck 先前已被已持有它​​的线程锁定。
  7. 锁已被复制。
  8. 锁是动态分配但静态初始化的。

这是假设您没有遗漏任何重要信息。例如,我假设您会告诉我们这是递归互斥锁、进程共享互斥锁还是具有任何其他特殊属性。

【讨论】:

  • 感谢您的列表!正是我想要的。
  • 我尝试了一个简单的 lock() 紧跟 unlock() ,但它仍然崩溃。这消除了(1),(4)。锁是动态分配的,但不是静态使用的,消除了(8)。它是在构造函数中初始化的类成员变量指针,消除了(7)。 (2) 是可能的,但文件显示不需要初始化? (5)总是可能的,但消除临界区会消除崩溃,所以不太可能(6)重新锁定有什么问题?只要是之前解锁的libstdc++是静态链接的,都可能有关系。我们必须使用一种解决方法来构建。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 2019-04-14
  • 1970-01-01
  • 2020-05-14
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多