答案 0 :(得分:30)
因为它永远不会发生在正确的程序中,并且检查从未发生过的事情是浪费的(并且进行检查需要存储拥有的线程ID,这也是浪费)。
请注意,它是未定义的,允许调试实现抛出异常,例如,同时仍然允许发布实现尽可能高效。
答案 1 :(得分:15)
未定义的行为允许实现执行最快/最方便的操作。例如,非递归互斥锁的有效实现可能是单个位,其中锁操作是在循环中使用原子比较和交换指令实现的。如果拥有互斥锁的线程试图再次锁定它,它将会死锁,因为它正在等待互斥锁解锁但是因为没有其他人可以解锁它(除非有一些其他错误,其中一些不拥有它的线程解锁它)线程将永远等待。