POSIX线程退出/崩溃/异常崩溃,同时持有互斥锁

时间:2011-09-08 13:02:32

标签: c pthreads posix mutex

的情况下,是否有明确定义的POSIX互斥锁所有权行为
  1. 线程退出
  2. 线程崩溃
  3. 由于异常
  4. 导致线程崩溃

    假设thread-1拥有互斥锁。并且线程2正在等待获取相同的互斥锁。并且线程1进入1/2/3场景。对thread-2有什么影响?

    PS:我相信自旋锁的行为是,不要解除阻塞线程2,并推断受旋转锁定保护的部分无论如何都是坏的。

2 个答案:

答案 0 :(得分:7)

如果您担心这些问题, Robust Mutexes 可能是您正在寻找的工具:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_setrobust.html

拥有强大互斥锁的线程在没有解锁的情况下终止后,尝试锁定它的下一个线程将获得EOWNERDEAD并成为新的所有者。这表示它负责清除互斥锁保护的状态,并在解锁之前使用pthread_mutex_consistent功能再次标记它。解锁它而不将其标记为一致会使互斥锁处于永久不可恢复的状态。

请注意,对于强大的互斥锁,锁定互斥锁的所有代码都必须知道可能会返回EOWNERDEAD

答案 1 :(得分:1)

这很简单。如果您没有明确解锁互斥锁,它将保持锁定状态,无论发生了什么或为什么。这是c,而不是铁轨或视觉基础上的红宝石。