信号量
信号量简介
信号量(Semaphore)是一种实现任务间通信的机制,可以实现任务之间同步或临界资源的互斥访问,常用于协助一组相互竞争的任务来访问临界资源。在多任务系统中,各任务之间需要同步或互斥实现临界资源的保护,信号量功能可以为用户提供这方面的支持。
- 1.1 二值信号量
二值信号量既可以用于临界资源访问也可以用于同步功能。 - 1.2 计数信号量
二进制信号量可以被认为是长度为 1 的队列,而计数信号量则可以被认为长度大于 1的队列,信号量使用者依然不必关心存储在队列中的消息,只需关心队列是否有消息即可,计数信号量数值表示可用资源的数目。 - 1.3 互斥信号量
互斥信号量其实是特殊的二值信号量,由于其特有的优先级继承机制从而使它更适用于简单互锁,也就是保护临界资源。 - 1.4 递归信号量
常用信号量API函数
创建信号量函数
创建二值信号量 xSemaphoreCreateBinary()
创建计数信号量 xSemaphoreCreateCounting()
信号量删除函数 vSemaphoreDelete()
信号量释放函数
xSemaphoreGive()
xSemaphoreGiveFromISR()
信号量获取函数
xSemaphoreTake()
xSemaphoreTakeFromISR()