我今天被问到为什么没有函数pthread_mutex_assert_locked
可以使用(至少与错误检查互斥锁)来断言调用者持有特定的互斥锁。随后的讨论提出了将断言实现为:
assert(pthread_mutex_lock(m)==EDEADLK);
用于错误检查互斥锁。如果互斥锁在到达时被解锁,或者如果另一个线程将其锁定并解锁,则可以可靠地触发断言失败,但是在实际的死锁情况下,持有互斥锁的(其他)线程将不会向前推进直到该线程使断言成功,它将陷入僵局。
这是我们用现有的pthread互斥API做的最好的吗?有没有更好的方法断言互斥锁所有权,可靠地触发不会发生死锁?