C语言中互斥锁返回的顺序

C语言中互斥锁返回的顺序,c,linux,mutex,C,Linux,Mutex,假设有3个线程A、B和C。 和互斥锁 A在X上调用pthread_mutex_lock B在X上调用pthread_mutex_lock * C在X上调用pthread_mutex_lock A在X上调用pthread_mutex_unlock ** 现在谁能够首先使用共享资源?B还是C? 如果我尝试在*中使用pthread_destroy_mutex会发生什么?在**?中,谁现在能够首先使用共享资源? 这取决于内核调度器实现。这样说: 如果互斥对象引用的互斥对象上有线程被阻止 调用pthrea

假设有3个线程A、B和C。 和互斥锁

A在X上调用pthread_mutex_lock

B在X上调用pthread_mutex_lock

*

C在X上调用pthread_mutex_lock

A在X上调用pthread_mutex_unlock

**

现在谁能够首先使用共享资源?B还是C?
如果我尝试在*中使用pthread_destroy_mutex会发生什么?在**?

中,谁现在能够首先使用共享资源?

这取决于内核调度器实现。这样说:

如果互斥对象引用的互斥对象上有线程被阻止 调用pthread_mutex_unlock()时,导致互斥变为 可用时,调度策略应确定应使用哪个线程 获取互斥

如果我尝试在*中使用pthread_destroy_mutex会发生什么?在**?

再次从以下方面:

试图销毁锁定的互斥锁会导致未定义的行为


如果您对这些方面还有任何疑问,请建议查阅相关手册。

“B或C”—其中之一。作为设计师,你的工作是确保顺序无关紧要。这一点在中得到了部分回答。POSIX标准中回答了另一个问题:“试图破坏锁定的互斥锁会导致未定义的行为。”@MartinJames顺序无关紧要,但重要的是要知道,而不是接受现状?@Keddy1201否,知道并不重要。这些知识怎么会有用呢?在真正的软件中,锁定的顺序不太可能得到保证或预先确定,因此解锁时发生的情况也同样得到了很好的定义。如果你认为这很重要,那就是你做错了。