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

是否存在定义明确的POSIX互斥锁所有权行为

  1. 线程退出
  2. 线程崩溃
  3. 线程因exception而崩溃

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

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

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

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

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

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

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