同步互斥与通信
← 返回 MOC | ← 相关原理 | ← 主页
Queue
- 适合在任务和任务之间,或者 ISR 和任务之间传数据。
xQueueCreate();
xQueueSend();
xQueueReceive();
Semaphore
- 二值信号量更像“事件到了没”的通知。
- 计数信号量更像“还剩几个资源”的计数器。
Mutex
- 互斥量强调“资源所有权”,更适合保护共享资源。
- 互斥量通常带优先级继承,用来压制优先级反转。
- 不要因为二值信号量“也能让任务阻塞”,就拿它直接替代互斥量。
Event Group
- 适合“多个条件位组合判断”的场景。
- 当你关心的是一组事件状态,而不是一份数据时,它比队列更自然。
Task Notification
- 一对一事件通知时,任务通知通常比队列和信号量更轻。
- 用它之前先问清:你是在传数据,还是在传“某个事情发生了”。
和死锁、优先级反转的关系
- 多任务以不同顺序抢多个资源时,可能走向死锁。
- 低优先级任务持锁、高优先级任务等锁时,可能出现优先级反转。
- 锁顺序、超时、减少持锁时间,是很实际的设计手段。
这一篇要盯住什么
- 同步、互斥、通信不是一回事。
- 队列偏传数据,信号量偏同步,互斥量偏护资源。
- 优先级继承为什么只对互斥量最关键。