在VxWorks中,我使用SEM_INVERSION_SAFE选项创建一个互斥锁,以防止优先级反转问题。
手册说我必须也使用SEM_PRIORITY_Q选项。那是为什么?
答案 0 :(得分:3)
在VxWroks中创建互斥信号量时,您有两个选项来处理信号量排队(等待)的多个任务:FIFO或最高优先级任务。
当您使用SEM_INVERSION_SAFE选项时,持有互斥锁的任务将被提升到与等待信号量的最高优先级任务相同的优先级。
如果要为信号量使用FIFO队列,则内核必须遍历等待互斥锁的任务队列,以找到具有最高优先级的互斥锁。此操作不具有确定性,因为遍历队列的时间随着排队的任务数量的变化而变化。
当您使用SEM_PRIORITY_Q选项时,内核只需查看队列头部的任务,因为它是最高优先级。这是一个恒定的时间操作。