硬汉嵌入式论坛

 找回密码
 立即注册
查看: 539|回复: 5
收起左侧

[技术讨论] 互斥量使用会造成什么问题吗?

[复制链接]

39

主题

199

回帖

326

积分

高级会员

积分
326
发表于 2023-10-13 11:41:41 | 显示全部楼层 |阅读模式
小弟刚开始正式实践RTOS下的编程。(原先有自己玩过,但是不涉及工作中的业务代码)


对于一个实际的业务问题,用上RTOS写代码,我感觉到了力不从心。

我希望写出高质量的程序,希望我的函数是线程安全的,可重入的。然后我就大量的使用了互斥量。尽量避免使用全局变量,形参。
比如说,一个串口协议的业务逻辑里,每发送一包它的"index"需要增加,那么"index"这个全局变量我就创建一个互斥量来保护它了。

写了一部分逻辑后,回头来审查自己的代码,怎么看怎么别扭。感觉一点都不简洁美观,不符合我的审美。(审美这个说起来挺抽象的)

我现在主要的矛盾,就是日益增长的写代码追求和我贫瘠的代码水平之间的矛盾。

这不只是一个技术问题,也是我个人人生的疑惑。用了RTOS之后,我不知道怎么写代码了,我无法判断什么样的代码是好,什么样的代码不好。写一个代码的时候我会问自己,我应该如此频繁的使用互斥量吗,它会造成什么问题吗?我答不上来。写一个函数的时候,我也会问自己,这个函数会被多个任务调用吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2023-10-13 14:34:23 | 显示全部楼层
国庆的时候,恰好录制了一期视频,谈了下这个问题。

第8期ThreadX视频教程:应用实战,将裸机工程移植到RTOS的任务划分,驱动和应用层交互,中断DMA,C库和中间件处理等注意事项
https://www.armbbs.cn/forum.php?mod=viewthread&tid=121234
回复

使用道具 举报

3

主题

337

回帖

346

积分

高级会员

积分
346
发表于 2023-10-13 21:38:58 | 显示全部楼层
如果你想在编程路上走得更远,多线程编程是你必须历练的技能。因为这是趋势,而且其它上位机编程,服务器编程需要大量的多线程编码经验。
回复

使用道具 举报

3

主题

337

回帖

346

积分

高级会员

积分
346
发表于 2023-10-13 21:44:13 | 显示全部楼层
你对自己的编程水平很自知,这是好事。最怕水平烂而不自知,固步自封。
多线程并不是要到处互斥,临界段代码如果只是交换个变量,你完全可以仅用开/关中断;或者使用原子操作指令。
其次,不是把变量保护起来就是多线程,而是要把业务也用多线程的思想重新划分。
比如,一个串口硬件最好仅被一个线程访问,其它线程需要这个串口,就用消息队列来请求这个线程代为操作。等等
回复

使用道具 举报

3

主题

337

回帖

346

积分

高级会员

积分
346
发表于 2023-10-13 21:47:51 | 显示全部楼层
每个线程,最好都是这样的模型:它们总是等待这某个事件而挂起,一旦事件到达就处理;处理完毕后又一次等待,周而复始。
这里的事件,包括任何RTOS对象,包括事件标志、信号量、消息队列、等等。
回复

使用道具 举报

39

主题

199

回帖

326

积分

高级会员

积分
326
 楼主| 发表于 2023-10-14 14:21:29 | 显示全部楼层
glory 发表于 2023-10-13 21:44
你对自己的编程水平很自知,这是好事。最怕水平烂而不自知,固步自封。
多线程并不是要到处互斥,临界段代 ...

谢谢指点。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 05:20 , Processed in 0.286199 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表