0

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

4

1 回答 1

4

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

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

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

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

于 2008-09-20T00:26:56.403 回答