我知道Mutex的功能。但现在我对它的时机感到困惑。我特别指的是Linux内核代码。
例如,我们有3个线程(假设它们位于同一个处理器上,并且都是具有相同优先级的正常任务)。线程1,2和3尝试获取互斥锁,只有线程1获取它。线程2和3被阻塞并进入休眠状态。然后线程1完成了他的工作并解锁了Mutex。
所以这是我的问题:在这个时刻,会发生什么?线程1是否会继续执行,因为其预定的时间片未用完?或者线程2会立即获取锁并开始执行,因为它是第二个想要获取锁的线程吗?或者线程3是否会立即获取锁并开始执行,因为假设它从任务调度程序开始运行(让我们假设这个)?会发生什么?
答案 0 :(得分:3)
一旦线程1释放锁定,接下来发生的是非确定性。您可以使用上面概述的任何方案。
如果您的应用程序需要在线程中使用非常特定的顺序,那么您可能希望尝试让线程之间更明确地进行通信。在C中,您可以使用pipe()
。
但一般情况下,如果您接受混乱并让调度程序选择,性能最佳。
答案 1 :(得分:0)
一旦线程1完成了他的工作,他就会将MUTEX交给其他人,然后进入睡眠状态。