【问题标题】:Can I force a crash when I double-unlock a pthread_mutex_t?双重解锁 pthread_mutex_t 时可以强制崩溃吗?
【发布时间】:2016-04-16 11:49:14
【问题描述】:

this question 相关——我正在调试一些可以两次解锁互斥锁的代码,我正试图弄清楚它何时发生。我正在从 Helgrind 获取堆栈跟踪,但我希望程序在执行错误解锁时立即崩溃。

我知道解锁已经解锁的互斥锁的行为是未定义的,因此鼻恶魔是可以接受的实现 --- 我当然不能强迫鼻恶魔崩溃。但是考虑到 glibc 最新版本中的 pthreads 实现,有没有办法合理可靠地获得这种行为?

【问题讨论】:

  • 将互斥锁类型设置为PTHREAD_MUTEX_ERRORCHECK 如果互斥锁已经解锁,将导致解锁失败。显然,这不会自动导致崩溃,而是依赖于您的调用代码检测解锁失败。因此,它可能会或可能不会帮助您,但如果有帮助,请指出。

标签: c multithreading concurrency pthreads


【解决方案1】:

您可以做的是检查pthread_mutex_unlock 的返回值,并使用错误检查互斥锁(PTHREAD_MUTEX_ERRORCHECK 互斥锁类型),而不是导致崩溃。如果您检测到错误,请致电abort() 或其他任何方式。

【讨论】:

  • 太好了,我在文档中找不到这个。是否设置了 pthread_mutex_attr_t?为了完整起见,您能否将我指向文档或相关的 sn-p?
  • @PatrickCollins:pthread_mutex_unlock()pthread_mutexattr_settype() 的 POSIX 文档有相关信息。
猜你喜欢
  • 2011-06-17
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 2011-05-16
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多