为什么使用VxWorks反向安全互斥锁时需要SEM_PRIORITY_Q?
时间:2020-03-06 14:28:21 来源:igfitidea点击:
在VxWorks中,我正在使用SEM_INVERSION_SAFE选项创建一个互斥锁,以防止出现优先级反转问题。
该手册说,我还必须使用SEM_PRIORITY_Q选项。这是为什么?
解决方案
在VxWroks中创建互斥量信号量时,我们有两个选项来处理针对该信号量排队(等待)的多个任务:FIFO或者优先级最高的任务优先。
当我们使用SEM_INVERSION_SAFE选项时,持有互斥锁的任务将被提升到与等待信号量的最高优先级任务相同的优先级。
如果要对信号量使用FIFO队列,则内核将必须遍历等待互斥对象找到优先级最高的任务的队列。此操作不是确定性的,因为遍历队列的时间会随着排队的任务数的变化而变化。
当我们使用SEM_PRIORITY_Q选项时,内核只需查看队列开头的任务,因为它是最高优先级。这是恒定时间的操作。