怎么理解RTOS临界区

  临界资源指的是一次只能一个线程访问共享资源或者是不可中断代码,代码临界区指操作系统在处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打扰。为确保临界段代码的执行,在进入临界段之前要临界保护

临界保护有:禁止线程调度(可响应中断)、关中断(不可相应中断)

共享资源它可以是具体硬件设备。可以是内存(全局变量或者全局数组缓冲区)、IO、SCI、SPI、flash 等;可以是软件代码比如 printer(str); /* 访问共享打印函数 */

不可中断代码:硬件初始化、线程创建,不加临界保护可能会被中断打断,硬件初始化失败、线程创建失败 。比如就像上厕所,不可能到了一半就不上了。哈哈哈 有意思吧

  线程创建临界不可中断保护举例

   taskENER_CRITICAL();//进入临界区

   /* 创建线程代码 */
   …

   taskEXIT_CRITICAL();//退出临界区

保护共享资源经常使用互斥锁,什么是互斥锁???
  互斥锁 mutex 还没有被上锁,那么申请该互斥锁的线程将成功对该互斥锁上锁。如果互斥锁 mutex 已经被当前线程上锁,且互斥锁类型为嵌套锁,则该互斥锁的持有计数加 1,当前线程也不会挂起等待(死锁),但线程必须对应相同次数的解锁。如果互斥锁 mutex 被其他线程上锁持有,则当前线程将被阻塞,一直到其他线程对该互斥锁解锁后,等待该互斥锁的线程将按照先进先出的原则获取互斥锁。

  使用互斥锁会导致一个潜在问题是线程优先级翻转。比如rt_thread 操作系统RTOS 操作系统中实现的是优先级继承算法优先级继承是指提高某个占有某种资源的低优先级线程的优先级,使之与所有等待该资源的线程中优先级最高的那个线程的优先级相等,然后执行,而当这个低优先级线程释放该资源时,优先级重新回到初始设定。因此,继承优先级的线程避免了系统资源被任何中间优先级的线程抢占。

相关文章:
18 代码的临界区

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天使也有爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值