信号量(Semaphore)
信号量是一种同步机制,通过计数器控制多任务/线程对共享资源的访问。本质是一个非负整数,支持两种原子操作:获取(Take/P)和释放(Give/V),需手动释放(减少)信号量。
使用流程:
①创建信号量(成功后返回信号量句柄)->获取信号量->(若不用则删除信号量)
②单独释放信号量(相当于改变信号量)
1. 创建信号量
类似创建队列,先使用创建信号量句柄再创建信号量
同队列,xSemaphoreCreate必须可以被app_main调用()
SemaphoreHandle_t bin_sem; //创建信号量句柄
bin_sem = xSemaphoreCreateBinary(); //通过之前定义的信号量句柄创建二进制信号量
2. 释放信号量
此处只演示二进制信号量
xSemaphoreGive(bin_sem); //每隔1s释放一个信号量
vTaskDelay(pdMS_TO_TICKS(1000));
3. 获取信号量(使用信号量)
if(pdTRUE == xSemaphoreTake(bin_sem,portMAX_DELAY))
//因为是二进制信号量,所以只有两个状态0/1
ESP_LOGI("bin_sem","You got the SEM_BIN!");



Comments | NOTHING