概述
临界资源:一次仅允许一个(或者指定数量)线程访问的共享资源,可以是一个具体的硬件设备,也可以是一个变量,一个缓冲区
线程之间必须互斥地对临界资源进行访问
临界区:每个线程中访问(操作)临界资源的那段代码称为临界区(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学习 临界区保护所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复