2

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

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

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

4

2 回答 2

3

一旦线程 1 释放锁,接下来发生的事情是不确定的。您上面概述的任何情况都是可能的。

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

一般来说,如果你接受混乱并让调度程序选择,性能最好。

于 2012-10-08T14:59:29.933 回答
0

线程 1 完成工作后,他将 MUTEX 还给其他人,然后进入睡眠状态。

于 2012-10-08T15:00:31.047 回答