【发布时间】:2023-03-31 07:15:01
【问题描述】:
在这份 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() (或类似函数)而导致优先级更改的情况?也许这只是对这样一个事实的奇怪描述,即此类线程以从互斥体继承的优先级执行,因此对其原始优先级的更改没有任何影响?
我尝试搜索对此行为的不同描述,但所有规范都只是原始规范的副本,其中一些使用略有不同的词,但这根本没有区别。
有什么想法吗?
【问题讨论】:
标签: multithreading pthreads posix mutex priority-inversion