为什么解锁已经被另一个线程锁定的互斥锁会导致未定义的行为?

根据http://www.cplusplus.com/reference/mutex/mutex/unlock/,例如,如果线程1锁定了一个互斥锁,然后线程2尝试在未锁定该互斥锁之前对其进行解锁,则将导致未定义的行为。

最佳答案

您提供的链接实际上是关于双重解锁,而不是双重锁定。
但是,该操作(即从其他线程解锁互斥锁,而所有者线程未锁定互斥锁)是UB,因为该语言未定义应如何实现互斥锁,因此(这纯粹是推测)启用了二进制锁,哪个双重解锁实际上可能会锁定...

关于c++ - 解锁另一个线程锁定的互斥锁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57342160/

10-13 08:22