• FreeRTOS之信号量


    信号量:

    作用:操作系统中用来资源管理和任务同步

    分类:二值信号量 、互斥信号量、计数型信号量、递归互斥信号量

    二值信号量:

    使用场合:与互斥信号量类似,但没有优先级继承,因而适合与同步(包括任务与任务、任务和中断的同步)

    本质:一个只有一个队列项的队列,只有两种状态.

    运行机制:1 任务请求信号量,信号量无效,任务1进入阻塞态

                      2 中断或任务2释放信号量,信号量有效

                      3 任务1获取信号量成功,任务1从阻塞态解除,执行相关处理

                      4 由于任务函数一般为一个大循环,再次执行步骤1 ,任务1处于阻塞态,等待中断或任务2

      二值信号量会引起优先级反转,解决方式要用互斥信号量

    计数型信号量:

    与二值信号量相比,二值信号量长度为1,计数型信号量长度大于1

    使用场合:事件计数,这中场合,其初始化数值为0

                     资源管理,这中场合,其初始化数值为资源数量

    互斥信号量:

    本质:一个拥有优先级继承的二值信号量

    使用场合:只能用于任务之间的互斥,不能用于中断服务函数

    递归互斥信号量:

    一种特殊的互斥信号量,一般获取了互斥信号量的任务就不能再次获取这个互斥信号量,但递归互斥信号量不同,已经获取了递归互斥信号量的任务可以再次获取这个递归互斥信号量,而且次数不限。若一个任务成功获取了5次递归信号量,那么这个任务也得同样的释放5次递归信号量。有优先级继承机制,所以使用完递归信号量一定要释放。(因为优先级继承的存在)只能用在任务中,不能用在中断服务程序。

  • 相关阅读:
    亚马逊怎么下单更真实
    Containerd 如何配置 Proxy?
    记一场vue面试
    面试必备(背)--Redis八股文系列
    [附源码]JAVA毕业设计高校学生社团管理(系统+LW)
    Python深度学习实战-基于tensorflow.keras六步法搭建神经网络(附源码和实现效果)
    基于Java+SpringBoot+LayUI仓库管理系统
    webpack构建01-vue项目之 手动webpack打包
    【Linux】指令学习
    WPF使用Blazor的快速案例
  • 原文地址:https://blog.csdn.net/L1153413073/article/details/82823672