2

在 POSIX 系统(linux 等)中,当多个线程锁定一个公共互斥体时 - 是始终观察到的锁定顺序,还是在调度临界区中的下一个线程时线程优先级偏向更高优先级的线程?

标准是否提到了有关行为的任何内容?因为据我所见,它似乎只提到了所需的接口。

请注意,我正在寻找任何符合 POSIX 的系统(不仅仅是 linux)的指导,所以请随意建议其他操作系统(QNX、Minix 等)的行为。

4

1 回答 1

4

当多个线程等待锁定同一个互斥体时,当互斥体可用时,优先级最高的线程将首先被解除阻塞。如果多个线程具有相同的优先级,则解锁哪个线程将取决于所使用的调度算法,例如使用 FIFO 策略,等待时间最长的线程将首先被唤醒。

线程优先级和同步是一个相当棘手的领域,您需要非常小心,不要最终导致优先级反转并导致死锁。

Butenhof 的Programming with POSIX Threads第 5.5 章涉及实时调度。

于 2012-04-30T09:59:46.153 回答