知识点[基础] 临界区

96 阅读1分钟

什么是临界区?

操作系统中有很多公共资源,线程访问这些资源时需要保证其操作的原子性,此时该公共资源就被称为临界区资源,临界区资源每次只能有一个进程操作,进入临界区之后其它进程无法被调度,也无法进入临界区,进入临界区的进程无法被time中断打断,只能自己释放,

常见的临界区资源

临界区资源有着共同的属性特点,那就是互斥性,即一次只能被一个进程占有

  1. 硬件设备,磁盘等
  2. 系统资源: 公共变量,公共缓冲区,消息队列

在freertos中进入临界区

  1. 使用taskENTER_CRITICALtaskEXIT_CRITICAL函数。

该函数直接关闭了中断,使其它任务无法调度,只能等待函数操作完成后自己退出并恢复中断。由此我们可以注意到临界区操作的代码必须一个字,尽量在几个运行周期内处理完毕,同时需要注意进入临界区后必须退出临界区。

  1. 使用vTaskSuspendAllxTaskResumeAll函数

该函数的作用是将所有的任务挂起,来执行临界区,这种方式不关闭中断。

  1. 通过互斥信号量控制资源访问,该种方式就不属于进入临界区的方式了。