使用 VxWorks 反转安全互斥体时为什么需要 SEM_PRIORITY_Q?

Ben*_*oit 0 mutex semaphore vxworks

在 VxWorks 中,我使用 SEM_INVERSION_SAFE 选项创建互斥体,以防止优先级反转问题。
手册说我还必须使用 SEM_PRIORITY_Q 选项。这是为什么?

Ben*_*oit 5

在 VxWroks 中创建互斥信号量时,您有两种选择来处理排队(等待)信号量的多个任务:先进先出或优先级最高的任务。

当您使用 SEM_INVERSION_SAFE 选项时,持有互斥体的任务将提升到与等待信号量的最高优先级任务相同的优先级。

如果要为信号量使用 FIFO 队列,则内核必须遍历等待互斥体的任务队列以找到具有最高优先级的任务。此操作不是确定性的,因为遍历队列的时间会随着排队任务数量的变化而变化。

当您使用 SEM_PRIORITY_Q 选项时,内核只需查看队列头部的任务,因为它具有最高优先级。这是一个恒定时间操作。