我是靠谱客的博主 暴躁冬日,最近开发中收集的这篇文章主要介绍RT-Thread学习 临界区保护,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

临界资源:一次仅允许一个(或者指定数量)线程访问的共享资源,可以是一个具体的硬件设备,也可以是一个变量,一个缓冲区

线程之间必须互斥地对临界资源进行访问

临界区:每个线程中访问(操作)临界资源的那段代码称为临界区(Critical Section),每次只准许一个线程进入临界区

临界区保护方法:

1.关闭系统调度保护临界区

(1)禁止调度

         把调度器锁住不让其进行进程切换,保证当前运行的任务不被换出,直到调度器解锁(较常用)

void thread_entry(void *para)
{
while(1)
{
rt_enter_critical();
//调度器上锁,上锁后不再切换到其他线程,只响应中断
/*临界区代码
code
*/
rt_exit_critical();//调度器解锁
}
}

(2)关闭中断

         因为所有的调度都是建立在中断的基础上的,当我们关闭中断之后,系统不能再进行调度,线程也不会被其他进程抢占

void thread_entry(void *para)
{
rt_base_t level;
while(1)
{
level = rt_hw_interrupt_disable();
//关闭中断
/*临界区代码
code
*/
rt_hw_interrupt_enable(level); //打开中断
}
}

2.互斥特性保护临界区

(1)信号量

(2)互斥量

 

最后

以上就是暴躁冬日为你收集整理的RT-Thread学习 临界区保护的全部内容,希望文章能够帮你解决RT-Thread学习 临界区保护所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部