第六章 信号量

1、信号量的基本使用

  • 信号:起通知作用
  • 量: 还可以用来表示资源的数量
    • 当"量"没有限制时,它就是"计数型信号量"(Counting Semaphores)
    • 当"量"只有 0、 1 两个取值时,它就是"二进制信号量"(Binary Semaphores)
  • 支持的动作: "give"给出资源,计数值加 1; "take"获得资源,计数值减 1
    计数型信号量的典型场景是:
    • 计数:事件产生时"give"信号量,让计数值加 1;处理事件时要先"take"信
      号量,就是获得信号量,让计数值减 1。
    • 资源管理:要想访问资源需要先"take"信号量,让计数值减 1;用完资源后
      "give"信号量,让计数值加 1

信号量信号量的本质还是队列,核心是计数值

2、信号量函数

2.1 创建

/* 创建一个二进制信号量,返回它的句柄。
* 此函数内部会分配信号量结构体
* 返回值: 返回句柄,非 NULL 表示成功
*/
SemaphoreHandle_t xSemaphoreCreateBinary( void );
/* 创建一个计数型信号量,返回它的句柄。
* 此函数内部会分配信号量结构体
* uxMaxCount: 最大计数值
* uxInitialCount: 初始计数值
* 返回值: 返回句柄,非 NULL 表示成功
*/
SemaphoreHandle_t xSemaphoreCreateCounting(UBaseType_t uxMaxCount, UBaseType_t uxInitialCount);

2.2 删除

/*
* xSemaphore: 信号量句柄,你要删除哪个信号量
*/
void vSemaphoreDelete( SemaphoreHandle_t xSemaphore );

2.3 give / take

BaseType_t xSemaphoreGive( SemaphoreHandle_t xSemaphore );

give函数

BaseType_t xSemaphoreTake(SemaphoreHandle_t xSemaphore,TickType_t xTicksToWait);

take函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值