信号量的作用
信号量常常用于控制对共享资源的访问和任务同步。
注:信号量被获取没有释放,那其他任务就无法获取了!递归互斥除外!
信号量的分类
信号量 | 作用 |
---|---|
计数信号量 | 判断是信号量是否为空,就是获取和释放是不是相等 |
二值信号量 | 二值信号量其实就是一个只有一个队列项的队列 |
互斥信号量 | 互斥信号量有优先级继承的机制,所以只能用在任务中,不能用于中断服务函数 |
递归互斥信号量 | 可以同时获取同一信号量 |
信号量创建获取释放
信号量 | 创建 | 获取 | 释放 |
---|---|---|---|
计数信号量 | xSemaphoreCreateCounting() | xSemaphoreTake(); | xSemaphoreGive(); |
二值信号量 | xSemaphoreCreateBinary() | xSemaphoreTake(); | xSemaphoreGive(); |
互斥信号量 | xSemaphoreCreateMutex(); | xSemaphoreTake(); | xSemaphoreGive(); |
递归互斥信号量 | xSemaphoreCreateRecursiveMutex(); | xSemaphoreTakeRecursive(); | xSemaphoreGiveRecursive(); |
在中断中就需要把函数换一下。