安阳网课,重庆seo顾问服务,app对接wordpress,网络营销策划方案ppt模板freertos的信号量和互斥锁有两个比较形象的例子可以解释两者的主要用途。
第一个是信号量#xff1a; 使用信号量的最初目的是为了给共享 资源建立一个标志#xff0c;该标志表示该共享资源被占用情况。这样#xff0c;当一个任务在访问共享资源之前#xff0c;可以先对这…freertos的信号量和互斥锁有两个比较形象的例子可以解释两者的主要用途。
第一个是信号量 使用信号量的最初目的是为了给共享 资源建立一个标志该标志表示该共享资源被占用情况。这样当一个任务在访问共享资源之前可以先对这个标志进行查询从而在了解资源被占用的情况之后再来决定自己的行为。 例如停车场假如停车场有一百个停车位那么在没有车辆驶 入的情况下信号量就是100当驶入一辆汽车信号量减1驶出一辆汽车信号量就加1。当驶入的汽车 为100的时候信号量就会为0这个时候如果还有汽车准备驶入停车场就无法再获取到信号量了从 而禁止驶入。直到有汽车驶出停车场后信号量才会被释放这个时候之前想要驶入停车场的汽车就会获得刚刚释放的信号量从而准许进入停车场。 例子来源雅特力的freertos的学习资料。 第二个互斥锁 从互斥信号量这个名字就知道是为了资源互斥访问而设计的它和二值信号量都有资源互斥访问的功 能只是二值信号量可能会发生优先级翻转的问题而互斥信号量则采取了措施尽量回避 这个问题。 举个例子互斥锁就像列车的上的卫生间当有人进去的时候一关门就会提示卫生间有人其他人再想进这个卫生间就必须等上一个人主动从卫生间出来这里有个细节就是必须他自己获取锁的线程释放资源不能别人别的线程给他释放。而信号量是没有这个限制的。 然后是优先级翻转的问题 为什么互斥锁可以尽量将优先级翻转问题降到最低因为互斥锁有优先级继承的机制。 举个例子当一个高优先级任务想要获取某互斥信号量但是该信号量被某低优先级的任务所持有此时高优先级的任务就会进入阻塞态在进入阻塞态之前此高优先级的任务会将持有互斥信号量的低优先级的任务的优先级提高到和高优先级任务相同的优先级。这样某个中优先级的任务就不会打断这个低优先级的任务这个低优先级的任务就可以尽快使用完资源释放给高优先级任务。