RTOS(8)信号量和互斥量
1.信号量
信号量分为二值信号量和计数信号量
与队列相比:他不能传输数据,但同时他不需要传输数据,占用的空间也更小,运行更快;
在源码里面,信号量的代码其实用到了队列的代码,是特殊的队列;
队列头的结构体中的队列长度被复用为计数值;
操作Take和Give的时候跟队列一样要关中断,然后处理计数值,唤醒等操作,再开中断;
2.互斥量
与二值信号量类似,是特殊的信号量,本身是想实现谁上锁,谁解锁这个问题;
二级制信号量初始值是0,创建后需要Give一次;互斥量初始值是1,创建后不需要Give一次。
在代码中,也是特殊的队列;
优先级反转:
解决方法:优先级继承
高优先级任务获取互斥量失败之后,将优先级继承给低优先级的任务;
任务中有当前优先级和原始优先级两个变量,便于解除继承;
递归上锁
解决方法:可以使用递归锁;递归锁实现了:谁上锁就由谁解锁。成对出现;