本节介绍二值信号量解决资源间共享问题的原理与示例。

相比前面的方式,该方式能够将影响的范围控制在需要访问共享任务的资源之间,其它的任务均不受影响。所以这种方式比较受欢迎。

主要内容

工作原理

二值信号量在这里仅仅是指取值为0、1的信号量。但并不指信号量本身只能限定取值0或者1,也可指将普通的计数信号量限定成最大计数1的条件下使用。
在视频中,我们演示的就是将tinyOS的普通计数信号量作为二值信号量使用。
在使用二值信号量之后,原有的问题解决效果如下:
二值信号量解决任务间资源共享问题 - 图1

二值信号量解决任务间资源共享问题 - 图2
根据我们对信号量的了解。其保护过程中并不像关中断/调度锁那样禁止切换任务,而是将需要访问该资源的任务在等待队列中等待。

嵌套问题

不能对同一资源使用嵌套,这会导致任务在内层中在信号量等待,永远无法往下执行。

特性总结

使用这种方式的特点和优缺点总结如下。
二值信号量解决任务间资源共享问题 - 图3

重点难点

注意事项

注意,在有些RTOS中可能专门提供了名为二值信号量的实现,除了计数限定为0和1外,可能还提供优先级反转等功能。这种信号量在tinyOS中称之为互斥信号量。
具体不同OS中,信号的实现不同,名称也不同。请不要在意名称,而在意原理上。

常见问题