在已经运行的旧代码中,我找到了一个他们试图解锁已经解锁的互斥锁的地方。
我很清楚,解锁已经解锁的互斥锁会导致未定义的行为。
但我怀疑是
pthread_mutex_unlock
上会看到未定义的行为?或者可以在任何下一个pthread调用中看到未定义的行为?答案 0 :(得分:1)
我能通过检查编译器文档来预测行为吗?
如果编译器说明了行为是什么,那么如果您使用该编译器(并且它保留了该行为),那么您可以依赖该行为。
是否有可能导致线程被阻塞(死锁)?
是。 UB可以带来任何好处。例如,如果解锁函数无条件地减少锁定计数,则它可能会下溢,从而永久锁定互斥锁。
在pthread_mutex_unlock上可以看到未定义的行为,它解锁已经解锁的线程?或者可以在任何下一个pthread调用中看到未定义的行为?
您正在询问如何定义行为。这是未定义的。在此之后的任何时候都可能发生任何事情,至少就POSIX pthreads标准而言。除非其他事情说明会发生什么,否则它可以是任何事情而你正式无权抱怨。