通过信号量实现共享资源的保护
概述
如前所述、关中断、关调度的方法虽然可以实现共享资源的保护,但它们都带有副作用,即会影响中断、调度器的正常工作。
当共享资源的访问非常复杂并且非常耗费时间时,关中断、关调度的方法因其副作用,会对系统的实时性造成较大影响。此时应该采取更轻量级的共享资源保护方法。
前述在章节 使用二值信号量实现任务间单向同步 中讲述了使用二值信号量实现任务间事件单向同步的功能。实际上,二值信号量也可以用来实现共享资源的保护。与前述关中断中介绍的加锁-去锁机制类似,使用信号量保护共享资源的实现原理如下:
即创建一个二值信号量,初始值设置为1。通过二值信号量的值是否为1,标识某个共享资源是否正在被使用。
xSemaphoreTake(s_binary_sem, portMAX_DELAY)