互斥量(Mutexes
)可以概括成拥有优先级继承属性的二值信号量(你看,信号量、互斥、队列其实都是类似的,只不过各自的特俗属性使得在某些应用场合更加合适而已)。
Mutexes
(‘MUT’ual ‘EX’clusion)更适合完成互斥,二值信号量更适合完成同步。
在很多嵌入式应用中,某个外设通常情况下是需要独占的去使用的,比如一个串口,如果A任务需要发送”hello”,B任务发送”world”,如果不去加以控制,两个任务都能同时得到这个串口的使用权,因为内核调度的缘故,最终发送出来的可能是”heworllold”。这将毫无意义。互斥量即可以解决这个问题,任务在使用某个资源时,必须先获得使用权限,此时其他任务因为无法获得这个资源的使用权限而阻塞,等待任务使用完成,释放资源使得资源重新变为可用,此时等待这个资源的其他任务获得使用权。
以上,其实也就是互斥量的使用方法。互斥量于信号量使用相同的API,因此也可以设置超时时间。与二值信号量不同的是,互斥量具有优先级继承的特性,这是为了防止优先级反转而设计的。当一个高优先级的任务在等待一个资源而被阻塞时,当前获得该资源的低优先级任务将短暂继承高优先级任务的优先级。当然,一个硬实时系统在设计的时候就应该避免这种情况。
互斥量不能在中断中使用:
- 互斥量的优先级继承属性意味着只能在任务间使用
- 中断在等待一个互斥量保护的资源的时候,不能阻塞
下图是,互斥量的使用图:
当前内容版权归 tangguocheng 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 tangguocheng .