互斥信号量和二值信号量

  互斥信号量其实就是一个拥有优先级继承的二值信号量,在同步的应用中(任务与任务或者任务与中断)二值信号量最适合。互斥信号量适用于那些需要互斥访问的应用中。在互斥访问中互斥信号量相当于一把钥匙,当任务想要使用资源的时候就必须先获得这个钥匙,当使用完资源以后就必须归还这个钥匙,这样其它任务就可以拿着这个钥匙去使用资源。

  互斥信号量和二值信号量操作基本相同,但相对于二值信号量而言,互斥信号量具有优先级继承的特性。当一个互斥信号量正在被一个低优先级的任务使用,而此时高优先级的任务也尝试获取这个互斥信号量的话就会被阻塞。不过这个高优先级的任务会将低优先级任务的优先级提升到与自己相同的优先级,这个过程就是优先级继承。优先级继承尽可能降低了高优先级任务处于阻塞状态的时间,并且将已经出现的“优先级翻转”的影响降到最低。

  优先级继承并不能完全的消除优先级翻转,它只是尽可能的降低优先级翻转带来的影响。硬实时应用应该尽可能在设计之初就要避免优先级翻转的发生。互斥信号量不能用于中断服务函数中,原因如下:

  • 互斥信号量有优先级继承机制,所以只能用在任务中,不能用于中断服务函数。
  • 中断服务函数不能因为要等待互斥信号而设置阻塞时间进入阻塞态。

 

posted @ 2022-10-20 11:52  lc0811  阅读(396)  评论(0编辑  收藏  举报