Loading

临界区保护

临界区保护

​ 临界资源是指一次仅允许一个线程访问的共享资源。它可以是一个具体的硬件设备,也可以是一个变量、一个缓冲区。

​ 不论是硬件临界资源,还是软件临界资源,多个线程必须互斥地对它们进行访问。

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

禁止调度:

​ 禁止调度,即是把调度器锁住,不让其进行线程切换。这样就能保证当前运行的任务不被换出,直到调度器解锁,所以禁止调度是常用的临界区保护方法

void thread_entry(void* parameter)
{
	while(1)
	{
        /* 调度器上锁,上锁后将不再切换到其他线程,仅响应中断 */
        rt_enter_critical();
        /* 以下进入临界区 */
        . . . .
        /* 调度器解锁 */
        rt_exit_critical();
	}
}

关闭中断

void thread_entry(void* parameter)
{         
	rt_base_t level;
	while(1)
	{
        /* 关闭中断*/
        level = rt_hw_interrupt_disable();
        /* 以下是临界区*/
        . . . .
        /* 关闭中断*/
        rt_hw_interrupt_enable(level);
	}
}

posted @ 2020-12-11 21:57  沿途有余弦  阅读(185)  评论(0)    收藏  举报