1、轻型操作系统同步的方案详解
1)信号量
假设有两个任务 Task1 和 Task2,第一个任务进行按键的扫描,第二个任务进行LED灯的点亮
需求:
扫描到按键按下后点亮 LED 灯,也就是说第二个任务永远在等待第一个任务按键的扫描
实现:
首先 Task1 一直检测按键是否按下,如果按键按下以后,使用一个全局变量 flag 并设置 flag=1
而在 Task2 当中,不停检测 flag 值是否为 1,如果为 1,点亮 led 灯并把flag清零
此时 flag 提供的是一个信号量的作用,也就是说 Task1 按下按键以后,开始向 Task2 发送一个信号量 flag,Task2 接收到了 flag 信号量以后,就把LED灯点亮
2)互斥性信号量
假设有两个任务 Task1 和 Task2,都需要来访问一个共享的资源,如要访问一个共享的打印机
需求:
假设第一个任务 Task1 要打印 hello,第二个任务 Task2 要打印 world,Task1 在使用打印机的时候,Task2是绝对不能使用的,两个任务属于互斥关系
如果 Task1 在使用打印机,Task2 也在使用打印机,那打印出来的数据可能会出现乱码
实现:
为了防止 Task1 和 Task2 共同使用打印机,配置的时候就要使用一个约束,假设还是使用一个全局变量 flag 来表示
如果 flag=1,表示这个打印机处于空闲状态,假设这个时候 Task1 要使用打印机,它首先要判断 flag 的状态,如果判断 flag=1,它就开始使用打