线程优先级翻转
使用信号量会导致的另一个潜在问题是线程优先级翻转问题。所谓线程优先级翻转, 即当一个高优先级线程试图通过某种互斥IPC对象机制访问共享资源时, 如果该IPC对象已被一低优先级的线程所持有, 而这个低优先级线程在运行过程中可能又被其它一些中等优先级的线程抢占,因此造成高优先级线程被许多具有较低优先级的线程阻塞的情况。优先级翻转会造成高优先级线程的实时性得不到保证。
在 RT-Thread 中, 通过互斥量的优先级继承算法,可以有效的解决优先级翻转问题。
优先级继承是指提高某个占有某种共享资源的低优先级线程的优先级,使之与所有等待该资源的线程中优先级最高的那个线程的优先级相等,从而得到更快的执行然后释放共享资源, 而当这个低优先级线程释放该资源时,优先级重新回到初始设定值。
继承优先级的线程避免了系统共享资源被任何中间优先级的线程抢占。
优先级翻转现象提醒编程人员对共享资源进行互斥访问的代码段应尽量短!