接下来,我们有两个任务:任务A和任务B。
任务A的逻辑如下:
void TaskA(void \*pvParameters) {
// 等待任务B完成同步
xSemaphoreTake(binarySemaphore, portMAX_DELAY);
// 在此处执行任务A的同步操作
// ...
// 任务A完成同步
vTaskDelete(NULL);
}
任务B的逻辑如下:
void TaskB(void \*pvParameters) {
// 在此处执行任务B的同步操作
// ...
// 任务B完成同步,释放二值信号量
xSemaphoreGive(binarySemaphore);
vTaskDelete(NULL);
}
现在,让我们看一下任务间的同步过程:
任务A首先运行,并且由于二值信号量的计数值为0,调用xSemaphoreTake()时会被阻塞,等待二值信号量的触发。
任务B开始运行,它执行了自己的同步操作后,调用xSemaphoreGive()来释放二值信号量。此时,二值信号量的计数值变为1。
任务A被唤醒,继续执行后续的任务逻辑,完成了任务间的同步操作。
通过这种方式,我们可以确保任务A在任务B完成同步后再执行,从而实现了简单而可靠的任务间同步。
总结:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。<