一、对比表
| 对比维度 | 二值信号量(Binary Semaphore) | 互斥量(Mutex) |
|---|---|---|
| 本质 | 计数器 = 1 的信号量("令牌开关") | 独占资源的 "锁" |
| 核心用途 | 任务间 / 中断 - 任务同步(时序协调) | 保护共享资源(防止并发访问) |
| 资源归属 | 无归属,任意任务可获取 / 释放 | 有归属(仅持有任务可释放) |
| 关键机制 | 无优先级继承 / 天花板 | 支持优先级继承(解决优先级反转) |
| 中断支持 | 支持(中断中 Give,任务中 Take) | 不支持(仅任务中操作) |
| 死锁风险 | 低(无归属) | 高(同一任务重复获取会死锁) |
| 释放限制 | 非持有任务也可释放 | 仅持有任务能释放 |
| 典型场景 | 中断通知任务、任务间同步触发 | 访问串口 / 传感器 / 全局变量 |
二、总结
- 核心定位:二值信号量管 "同步",互斥量管 "互斥";
- 关键区别:互斥量有 "资源归属" 和 "优先级继承",二值信号量无;
- 避坑原则:保护共享资源优先用互斥量,时序协调优先用二值信号量;
- 禁忌:中断中绝不能操作互斥量,二值信号量仅能在中断中 "释放",不能 "获取"。