什么是Mutex获取和下达订单?

时间:2012-10-08 14:52:33

标签: linux kernel mutex

我知道Mutex的功能。但现在我对它的时机感到困惑。我特别指的是Linux内核代码。

例如,我们有3个线程(假设它们位于同一个处理器上,并且都是具有相同优先级的正常任务)。线程1,2和3尝试获取互斥锁,只有线程1获取它。线程2和3被阻塞并进入休眠状态。然后线程1完成了他的工作并解锁了Mutex。

所以这是我的问题:在这个时刻,会发生什么?线程1是否会继续执行,因为其预定的时间片未用完?或者线程2会立即获取锁并开始执行,因为它是第二个想要获取锁的线程吗?或者线程3是否会立即获取锁并开始执行,因为假设它从任务调度程序开始运行(让我们假设这个)?会发生什么?

2 个答案:

答案 0 :(得分:3)

一旦线程1释放锁定,接下来发生的是非确定性。您可以使用上面概述的任何方案。

如果您的应用程序需要在线程中使用非常特定的顺序,那么您可能希望尝试让线程之间更明确地进行通信。在C中,您可以使用pipe()

执行此操作

但一般情况下,如果您接受混乱并让调度程序选择,性能最佳。

答案 1 :(得分:0)

一旦线程1完成了他的工作,他就会将MUTEX交给其他人,然后进入睡眠状态。