第七讲 临界区保护
临界资源:
临界资源是指一次仅允许一个线程访问的共享资源。他可以是一个具体的硬件设备,也可以是一个变量,一块缓冲区。
不论是硬件临界资源还是软件临界资源,多个线程必须互斥的对他们进行访问。
临界区:
每个线程中访问(操作)临界资源的那段代码称为临界区(Critical Section),我们每次只允许一个线程进入临界区。
临界区保护方法:
1.关闭系统调度保护临界区
(1)禁止调度
void thread_entry(void *parameter)
{
while(1)
{
rt_enter_critical();//调度器上锁,禁止线程切换,仅响应中断
临界区
rt_exit_critical();//调度器解锁
}
}
(2)关闭中断(更暴力)
因为所有线程的调度都是建立在中断基础之上的,关闭中断后,自然就无法进行线程切换,线程也不会对其他线程抢占。
void thread_entry()
{
rt_base_t level;
while(1)
{
level=rt_hw_interrupt_disable();//关闭中断
临界区
rt_hw_interrupt_enable(level);//开启中断
}
}
2.互斥特性保护临界区
信号量,互斥量