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)互斥量

 

你可能感兴趣的:(STM32,RT-Thread)