在 POSIX 互斥协议的文档中 - http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_getprotocol.html# - 我们可以阅读以下部分:
当线程持有已使用 PTHREAD_PRIO_INHERIT 或 PTHREAD_PRIO_PROTECT 协议属性初始化的互斥锁时,如果其原始优先级发生更改,则不应将其移动到调度队列的尾部,例如通过调用 sched_setparam()。同样,当线程解锁已使用 PTHREAD_PRIO_INHERIT 或 PTHREAD_PRIO_PROTECT 协议属性初始化的互斥锁时,如果其原始优先级发生更改,则不应将其移动到其优先级的调度队列的尾部。
这可能是对这个片段的引用:
如果一个线程的策略或优先级已经被 pthread_setschedprio() 修改,它是一个正在运行的线程或者是可运行的,那么它就成为新优先级的线程列表的尾部。
(来源 - http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_08,SCHED_FIFO描述)
英语不是我的第一语言,所以我很难理解它到底在说什么......
这是否意味着当线程的优先级被提升时(由于继承或上限协议),它不是放在新优先级的尾部,而是放在头部?或者这可能描述了由于该线程本身或另一个线程调用 sched_setparam() (或类似函数)而导致优先级更改的情况?也许这只是对事实的一个奇怪描述,即这样的线程以从互斥体继承的优先级执行,因此对其原始优先级的任何更改都没有任何区别?
我尝试搜索对此行为的不同描述,但所有规范都只是原始规范的副本,其中一些使用略有不同的词,但这根本没有区别。
有任何想法吗?