信号量知识点

信号量

信号量基本概念

信号量(Semaphore)是一种实现任务间通信的机制,可以实现任务之间同步或临界资源的互斥
访问,常用于协助一组相互竞争的任务来访问临界资源。在多任务系统中,各任务之间需要同步
或互斥实现临界资源的保护,信号量功能可以为用户提供这方面的支持。
抽象的来讲,信号量是一个非负整数,所有获取它的任务都会将该整数减一(获取它当然是为了
使用资源),当该整数值为零时,所有试图获取它的任务都将处于阻塞状态。通常一个信号量的
计数值用于对应有效的资源数,表示剩下的可被占用的互斥资源数。其值的含义分两种情况:
• 0:表示没有积累下来的释放信号量操作,且有可能有在此信号量上阻塞的任务。
• 正值,表示有一个或多个释放信号量操作。

二值信号量的应用场景

用于任务间、任务与中断间同步的重要手段

二值信号量运作机制

二值信号量获取,任何任务都可以从创建的二值信号量资源中获取一个二值信号量,获取成功则
返回正确,否则任务会根据用户指定的阻塞超时时间来等待其他任务/中断释放信号量。在等待
这段时间,系统将任务变成阻塞态,任务将被挂到该信号量的阻塞等待列表中。
在这里插入图片描述

计数信号量的运作机制

计数信号量可以用于资源管理,允许多个任务获取信号量访问共享资源,但会限制任务的最大数
目。访问的任务数达到可支持的最大数目时,会阻塞其他试图获取该信号量的任务,直到有任务
释放了信号量。

信号控制块

  • CMSIS-RTOS 使用 osSemaphoreAttr_t 结构体来描述信号量属性
  • 创建信号量函数 osSemaphoreNew()
  • 信号量删除函数 osSemaphoreDelete()
  • 信号量释放函数 osSemaphoreRelease()
  • 信号量释放函数 osSemaphoreRelease() FreeRTOS 为我们提供两个不同的 API 函数,而 CMSIS-RTOS 为我们封装了统一的信号量释放函数
  • 信号量获取函数 osSemaphoreAcquire()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值