freertos的信号量和互斥锁学习笔记

freertos的信号量和互斥锁有两个比较形象的例子可以解释两者的主要用途。

第一个是信号量:

使用信号量的最初目的是为了给共享 资源建立一个标志,该标志表示该共享资源被占用情况。这样,当一个任务在访问共享资源之前,可以先对这个标志进行查询,从而在了解资源被占用的情况之后,再来决定自己的行为。
例如停车场,假如停车场有一百个停车位,那么在没有车辆驶 入的情况下信号量就是100,当驶入一辆汽车信号量减1,驶出一辆汽车信号量就加1。当驶入的汽车 为100的时候,信号量就会为0,这个时候如果还有汽车准备驶入停车场就无法再获取到信号量了从 而禁止驶入。直到有汽车驶出停车场后信号量才会被释放,这个时候之前想要驶入停车场的汽车就会获得刚刚释放的信号量从而准许进入停车场。
例子来源雅特力的freertos的学习资料。
第二个互斥锁:
从互斥信号量这个名字就知道是为了资源互斥访问而设计的,它和二值信号量都有资源互斥访问的功 能,只是二值信号量可能会发生优先级翻转的问题,而互斥信号量则采取了措施尽量回避 这个问题。
举个例子,互斥锁就像列车的上的卫生间,当有人进去的时候一关门就会提示,卫生间有人,其他人再想进这个卫生间就必须等上一个人主动从卫生间出来,这里有个细节就是必须他自己(获取锁的线程)释放资源,不能别人(别的线程)给他释放。而信号量是没有这个限制的。
然后是优先级翻转的问题,
为什么互斥锁可以尽量将优先级翻转问题降到最低,因为,互斥锁有优先级继承的机制。
举个例子,当一个高优先级任务想要获取某互斥信号量,但是该信号量被某低优先级的任务所持有,此时高优先级的任务就会进入阻塞态,在进入阻塞态之前此高优先级的任务会将持有互斥信号量的低优先级的任务的优先级提高到和高优先级任务相同的优先级。这样某个中优先级的任务就不会打断这个低优先级的任务,这个低优先级的任务就可以尽快使用完资源释放给高优先级任务。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值