[其它应用] 很多变量多线程读写是使用关中断好还是使用互斥进行保护呢?

[复制链接]
1871|7
 楼主| cr315 发表于 2023-5-6 09:33 | 显示全部楼层 |阅读模式
我想问一下,就是我有很多变量会多线程读写操作,有一些会比较频繁,我读写的时候是使用中断去保护还是增加互斥量去保护。

1.如果加互斥量,当前低优先级读写线程在获取到互斥量进行读写的时候,高优先级线程会打断当前线程去获取同一个互斥量,由于锁被占,高优先级挂起,低优先级继续执行,释放互斥锁后高优先级执行。这样会有多两次线程切换开销。

2.如果在读写的时候进入中断临界,低优先级读写完后退出中断,然后切换到高优先级进行读写。

所以我想问问大家在遇到很多变量多个线程读写的情况下怎么进行保护的?或者有没有其他更好方案?
tpgf 发表于 2023-5-12 08:18 | 显示全部楼层
最好还是使用互斥进行保护,这样防止误操作
keaibukelian 发表于 2023-5-12 12:08 | 显示全部楼层
在上位机语言里边可以锁定 涉及到单片机的c不知道有没有这个功能
paotangsan 发表于 2023-5-12 13:23 | 显示全部楼层
中断优先级高的会打断中断优先级低的中断处理函数吗
dalarang 发表于 2023-5-12 14:01 | 显示全部楼层
关中断只需要开启和关闭中断的语句,软件开销比较小,但是关闭中断不很快打开的话会影响系统正常中断的实时性。
所以非常频繁的读写,且保护所需的时间很短的话关中断,否则的话就用互斥量。
renzheshengui 发表于 2023-5-12 14:02 | 显示全部楼层
paotangsan 发表于 2023-5-12 13:23
中断优先级高的会打断中断优先级低的中断处理函数吗

好像会的 除非临时更改优先级或者禁止中断使能
wakayi 发表于 2023-5-12 14:22 | 显示全部楼层
请问什么叫做中断临界  ?是说快要产生中断但是还没有真的产生中断的时候吗
wowu 发表于 2023-5-12 14:45 | 显示全部楼层
临界段代码也叫临界区,指那些必须完整运行,不能被打断的代码段。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1466

主题

4964

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部