本节介绍二值信号量解决资源间共享问题的原理与示例。
相比前面的方式,该方式能够将影响的范围控制在需要访问共享任务的资源之间,其它的任务均不受影响。所以这种方式比较受欢迎。
主要内容
工作原理
二值信号量在这里仅仅是指取值为0、1的信号量。但并不指信号量本身只能限定取值0或者1,也可指将普通的计数信号量限定成最大计数1的条件下使用。
在视频中,我们演示的就是将tinyOS的普通计数信号量作为二值信号量使用。
在使用二值信号量之后,原有的问题解决效果如下:
根据我们对信号量的了解。其保护过程中并不像关中断/调度锁那样禁止切换任务,而是将需要访问该资源的任务在等待队列中等待。
嵌套问题
不能对同一资源使用嵌套,这会导致任务在内层中在信号量等待,永远无法往下执行。
特性总结
重点难点
注意事项
注意,在有些RTOS中可能专门提供了名为二值信号量的实现,除了计数限定为0和1外,可能还提供优先级反转等功能。这种信号量在tinyOS中称之为互斥信号量。
具体不同OS中,信号的实现不同,名称也不同。请不要在意名称,而在意原理上。