C语言中没有优先级继承的互斥体,what';有什么用?

C语言中没有优先级继承的互斥体,what';有什么用?,c,mutex,thread-priority,C,Mutex,Thread Priority,在多年来使用RTOS和互斥体的许多项目中,我承认我从未考虑过有意识地使用没有优先级继承(或上限,以可用的为准)的互斥体。假设该选项可用,例如在ThreadX中,互斥可以有优先级继承,也可以没有优先级继承,那么除了性能上的微小差异之外,为什么会有人禁用优先级继承呢?似乎每当您需要使用互斥锁时,无论您的设计多么谨慎,通常(总是?)都有可能发生优先级反转,那么有什么理由禁用最好的工具来缓解它呢?通常是因为您知道(通过设计)访问互斥锁的每个线程都具有相同的优先级。如果是这样的话,那么优先级反转就不会发生

在多年来使用RTOS和互斥体的许多项目中,我承认我从未考虑过有意识地使用没有优先级继承(或上限,以可用的为准)的互斥体。假设该选项可用,例如在ThreadX中,互斥可以有优先级继承,也可以没有优先级继承,那么除了性能上的微小差异之外,为什么会有人禁用优先级继承呢?似乎每当您需要使用互斥锁时,无论您的设计多么谨慎,通常(总是?)都有可能发生优先级反转,那么有什么理由禁用最好的工具来缓解它呢?

通常是因为您知道(通过设计)访问互斥锁的每个线程都具有相同的优先级。如果是这样的话,那么优先级反转就不会发生,所以开销就没有意义了。谢谢,@Chris。在我所从事的项目中,让多个线程共享相同的优先级是比较少见的。几乎总是,一些线程被识别为比其他线程更关键,并获得相应的更高优先级。不使用优先级继承还有其他原因吗?开销上的差异真的有那么大吗?@CJClegg我猜PI mutex还意味着它不仅提高了优先级,位也是公平的(否则就没有意义了)。检查。它表明,在MacOS上,公平互斥和不公平互斥之间的差异是10倍。大多数应用程序都不是实时的,因为它们更关心吞吐量而不是延迟,因此优先级反转并不是一个真正的问题(因为每秒的工作单元数通常不会受到影响)。