look实现等待和信号同步
在作为中断和任务,任务和任务之间的信号传递应用中,一定要初始化sem为0。
那么wait()和post()的规则如下:
1.由于sem=0,故wait()认为信号灯不可使用,进入阻塞等待。
2.发送源,如中断服务程序或其他任务post(),此时sem=1,即信号灯可以使用,任务迁移到就绪,再从就绪到运行。
3.接收任务运行后,sem=0,即信号灯又不可使用了。由于任务的无限循环,所以必然回到(1)
以此规律循环往复,用不消失。
我们可以比较裸奔和rtos在这上面的最大区别,裸奔靠瞎忙,任务靠阻塞。
|
|