当前位置: 首页 > news >正文

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

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

第一个是信号量:

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

相关文章:

  • C++基础——vector的详解与运用
  • const指针,星号判断方法
  • 移动摄像头专网需要解vlan,如何解决
  • 5.27周报
  • C-数据结构-树状存储的基本实现
  • 指纹识别经典图书、开源算法库、开源数据库
  • 嵌入式之译码器
  • 分成sum接近的2个集合,返回相对小的sum
  • SpringBoot前置知识01-SPI接口
  • 数学建模--LaTeX的基本使用
  • 授权调用: 介绍 Transformers 智能体 2.0
  • 流媒体内网穿透/组网/视频协议转换EasyNTS上云网关如何更改密码?
  • HTML5的标签(文本链接、图片路径详解)
  • React Native 之 Linking(链接)(十五)
  • Java实现图书系统
  • Git提交和配置命令
  • 已解决java.lang.ExceptionInInitializerError: 初始化程序中的异常错误的正确解决方法,亲测有效!!!
  • 报表显示中,是否具备条件格式功能设计?
  • 完全二叉树查找
  • Web安全:SQL注入之时间盲注原理+步骤+实战操作
  • [JDK工具-10] jvisualvm 多合一故障处理工具
  • 【GateWay】自定义RoutePredicateFactory
  • 今日总结2024/5/27
  • 使用 Snort 进行入侵检测
  • C++ | Leetcode C++题解之第116题填充每个节点的下一个右侧节点指针
  • 计算机网络学习
  • 代码随想录算法训练营第四天| 24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II
  • 职业探索--运维体系-SRE岗位/CRE岗位/运维岗位-服务心态-运维职业发展方向-运维对象和运维场景
  • 深入理解C++智能指针系列(五)
  • 1.Nginx上配置 HTTPS