二值信号量、计数型信号量与互斥量

二值信号量

什么是信号量?

  • 信号量(Semaphore),是在多任务环境下使用的一种机制,是可以用来保证两个或多个关键代码段不被并发调用。
  • 信号量这个名字,我们可以把它拆分来看,信号可以起到通知信号的作用,然后我们的量还可以用来表示资源的数量,当我们的量只有01的时候,它就可以被称作二值信号量,只有两个状态,当我们的那个量没有限制的时候,它就可以被称作为计数型信号量。
  • 信号量也是队列的一种。

什么是二值信号量?

  • 二值信号量其实就是一个长度为1,大小为零的队列,只有01两种状态,通常情况下,我们用它来进行互斥访问或任务同步。
  • 互斥访问:比如门钥匙,只有获取到钥匙才可以开门
  • 任务同步:比如我录完视频你才可以看视频

 二值信号量相关 API 函数

函数
描述
xSemaphoreCreateBinary()
使用动态方式创建二值信号量
xSemaphoreCreateBinaryStatic() 使用静态方式创建二值信号量
xSemaphoreGive()
释放信号量
xSemaphoreGiveFromISR() 中断中释放信号量
xSemaphoreTake() 获取信号量
xSemaphoreTakeFromISR() 中断中获取信号量
1. 创建二值信号量
SemaphoreHandle_t xSemaphoreCreateBinary( void )
参数:
返回值:
成功,返回对应二值信号量的句柄;
失败,返回 NULL
2. 释放二值信号量
BaseType_t xSemaphoreGive( SemaphoreHandle_t xSemaphore )
参数: xSemaphore:要释放的信号量句柄
返回值:
成功,返回pdTRUE
失败,返回 errQUEUE_FULL
3. 获取二值信号量
BaseType_t xSemaphoreTake( SemaphoreHandle_t xSemaphore,
TickType_t xTicksToWai

相关推荐

  1. 信号互斥

    2024-05-11 23:18:05       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 23:18:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 23:18:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 23:18:05       87 阅读
  4. Python语言-面向对象

    2024-05-11 23:18:05       96 阅读

热门阅读

  1. QT_BEGIN_NAMESPACE

    2024-05-11 23:18:05       34 阅读
  2. TypeScript的`undefined`作用与使用:初学者指南

    2024-05-11 23:18:05       38 阅读
  3. Redhat Linux忘记密码解决方案

    2024-05-11 23:18:05       34 阅读
  4. 第 8 章 机器人底盘Arduino端入口(自学二刷笔记)

    2024-05-11 23:18:05       28 阅读
  5. 研究生写论文常用工具以及如何快速阅读外文

    2024-05-11 23:18:05       34 阅读
  6. 接口测试的流程

    2024-05-11 23:18:05       30 阅读
  7. LeetCode刷题笔记第217题:存在重复元素

    2024-05-11 23:18:05       31 阅读
  8. c++数据结构-图(详解附算法代码,一看就懂)

    2024-05-11 23:18:05       40 阅读