在
的情况下,是否有明确定义的POSIX互斥锁所有权行为假设thread-1拥有互斥锁。并且线程2正在等待获取相同的互斥锁。并且线程1进入1/2/3场景。对thread-2有什么影响?
PS:我相信自旋锁的行为是,不要解除阻塞线程2,并推断受旋转锁定保护的部分无论如何都是坏的。
答案 0 :(得分:7)
如果您担心这些问题, Robust Mutexes 可能是您正在寻找的工具:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_setrobust.html
拥有强大互斥锁的线程在没有解锁的情况下终止后,尝试锁定它的下一个线程将获得EOWNERDEAD
并成为新的所有者。这表示它负责清除互斥锁保护的状态,并在解锁之前使用pthread_mutex_consistent
功能再次标记它。解锁它而不将其标记为一致会使互斥锁处于永久不可恢复的状态。
请注意,对于强大的互斥锁,锁定互斥锁的所有代码都必须知道可能会返回EOWNERDEAD
。
答案 1 :(得分:1)
这很简单。如果您没有明确解锁互斥锁,它将保持锁定状态,无论发生了什么或为什么。这是c,而不是铁轨或视觉基础上的红宝石。