FreeRTOS操作系统的几种防止资源竞争的方法

一、临界区
使用taskENTER_CRITICAL和taskEXIT_CRITICAL将共享资源操作部分包裹起来,其本质上是使得任务不再切换,并且只有优先级高于configMAX_SYSCAL_INTERRUPT_PRIORITY的中断才能打断该部分操作。

二、挂起调度器
也可以通过挂起调度器的方式来避免任务切换,从而达到独占资源的目的。
相关函数为vTaskSuspendAll()和xTaskResumeAll()

三、互斥量
通过互斥量的方式,要求在访问共享资源前,都需获得该资源的令牌,并在使用后归还令牌。
相关函数xSemaphoreCreateMutex()、xSemaphoreTake()、xSemaphoreGive()

四、守护任务
所谓守护任务即是对某个资源具有唯一所有权的任务,例如对于所有需要打印的地方,由单独一个任务去负责执行,其它任务通过队列的方式与之通信,这样就能保证对打印操作的“原子性”。而这个负责执行打印的任务即是守护任务。

总结
可以看到,上面所有的方法其实都需要编程者本身对资源的所有被使用的方式和地方有清晰的认识,并且严格执行所设定的规避资源竞争的规则。本质上来看,还是得依赖编程者自身对整个任务资源设计的清晰认识,操作系统只是提供了几个方式加以辅助。这么看来,还是优先级最高的中断操作最保险,不用想着资源竞争问题,其余所有中断和任务在操作资源时,还是都得想想的~

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值