RT_Thread_临界资源保护
1、临界资源、临界区
1.1、临界资源
任何时刻最多只允许一个线程去使用的资源。
进程间要以互斥的方式访问临界资源。
属于临界资源的硬件:打印机、音响、屏幕等;软件:消息队列,变量,数组,缓冲区等。
1.2、临界区
每个进程中访问临界资源的那段代码称为临界区(criticalsection)。
多个进程涉及到同一个临界资源的的临界区称为相关临界区。
使用临界区时,一般不允许其运行时间过长,只要运行在临界区的线程还没有离开,其他所有进入此临界区的线程都会被挂起而进入等待状态,并在一定程度上影响程序的运行性能。
2、如何保护临界区
2.1、关闭系统调度
- 禁止中断
rt_base_t level;
level = rt_hw_interrupt_disable();
//......
rt_hw_interrupt_enable(level);
- 关闭调度(还可响应中断)
rt_enter_critical(); //不再切换其他线程,但可以响应中断
//......
rt_exit_critical();
2.2、利用互斥
- 信号量
二值信号量,即信号量的初始值为1,访问临界区时-1,访问完释放+1;
//初始化信号量
rt_sem_init(&sem_lock, "lock", 1 ,RT_IPC_FLAG_PRIO);
//访问临界资源时,上锁
rt_sem_take(&sem_lock, RT_WAITING_FOREVER);
//......
//访问完,解锁
rt_sem_release(&sem_lock);
- 互斥量
/* 指向互斥量的指针 */
static rt_mutex_t dynamic_mutex = RT_NULL;
/* 创建一个动态互斥量 */
dynamic_mutex = rt_mutex_create("dmutex", RT_IPC_FLAG_PRIO);
if (dynamic_mutex == RT_NULL)
{rt_kprintf("create dynamic mutex failed.\n");return -1;
}
//开始访问临界资源
rt_mutex_take(dynamic_mutex, RT_WAITING_FOREVER);
//......
//结束访问临界资源
rt_mutex_release(dynamic_mutex);
RT_Thread_临界资源保护相关推荐
- FreeRTOS临界资源保护(临界区保护)
临界区未保护出现的异常 有一种问题相信大家都不愿碰上,就是低概率偶现问题,这类问题的根源,根据作者的经验常见于以下四种情况: 野指针引用 数组越界 栈溢出 临界资源未保护 今天我们说说其中之一 ...
- Boost锁~临界区保护和临界资源共享
前言: 除了thread,boost::thread另一个重要组成部分是mutex,以及工作在mutex上的boost::mutex::scoped_lock.condition和barrier,这些 ...
- freeRtos学习笔记 (7)信号量
freeRtos学习笔记 freeRtos信号量 信号量种类 信号量分为四种:二值信号量,互斥信号量,计数信号量和递归互斥信号量,其中计数信号量用于管理系统多个共享资源,用计数值表示可用资源数目;二值 ...
- java holdslock_一种检测Java并发程序代码分支路径lock是否遗漏的方法
开发java程序中,程序员往往会用synchronized lock 进行临界资源保护和线程同步:android平台上,提供了一些技巧来减少锁被错误使用:使用Locked后缀作为函数名字:Locked ...
- RTT的线程同步篇——信号量
野火RTT 19章信号量 2018年12月29日 10:46 相当于裸机中的标志 信号量:实现线程间的通信,实现线程间的同步货临界资源的互斥访问. 多线程系统中,线程间需要同步或互斥实现临界资源保护. ...
- STM32使用串口DMA方式发送数据
1.cubemx设置 1.1基本设置 1.2 打开DMA和中断 2.代码实现 HAL_UART_Transmit_DMA(&huart1,(uint8_t*)str,strlen(str)); ...
- Linux中断子系统
首先感谢原文作者 LoyenWang 的分享,可以点击章节阅读原作者原文,或者查看本文的转载地址,再次感谢原作者分享,已经在公众号上征得作者同意. 说明: Kernel版本:4.14 ARM64处理器 ...
- 嵌入式阶段性学习总结
转眼间近四个月的学习就结束了,我的这个阶段的生活也画上了句号.回想近四个月的学习.工作和生活上,有过震撼.诧异.怀疑,也有此刻越来越多的探求和欣喜,我感受最多的是自我在不断的成长和走向成熟,一个不断发 ...
- ThreadX内核源码分析(SMP) - 核间互斥(arm)
1.核间互斥介绍(_tx_thread_smp_protection) 在单核的ThreadX内核中,内核的临界资源互斥通过关中断实现:在多核cpu上,关闭整个cpu的代价比较大,单核上仍然使用关中断 ...
最新文章
- 探索--是测试的必须品
- PHPsession工作机制以及销毁session
- SQL 语句中的字段名 如果是 关键字怎么办?
- 求一个字符串的前缀与另一个字符串的后缀的最大相同子串
- python综合管理系统_学生综合信息管理系统
- Redis两种客户端:lettuce和Jedis的区别
- UVA - 12412 ​​​​​​​A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
- 伯乐发卡系统源码 可用
- 2020前端最新面试题(vue篇)
- Docker组队学习(二)
- spring cloud简介之最好参考
- java replace三个参数_javascript replace()第二个参数为函数时的参数用法
- 学会计为什么要学计算机基础,会计专业学生为什么要学数据库
- 2022年软件评测师考试大纲
- 爬取cloudmusic歌单
- 【STM32训练—SIM900A模块】第一篇、电脑的串口助手驱动SIM900A发送中文和英文短信
- 【无标题】Access control configuration prevents your request from being allowed at this time.
- OBS显示器捕获黑屏问题解决
- Ethercat远程IO模块接线准则
- Vue3官网使用及简介