您尚未登录。

楼主 # 2022-08-09 00:40:04

游乐场
会员
注册时间: 2022-07-29
已发帖子: 54
积分: 172

【代码分享】一种解决全局资源访问冲突的方法以及两个未解决的问题

方法是官方老哥讲的模型,我称之为申请者与审核者。一个线程审核所有全局资源,其他线程申请。

按照这个思路,我以论坛老哥提供的printf做实验,写了几行代码来操作测试。

直接上代码:
.png
.png
printf.png

多线程printf串口打印测试通过,无乱码。

有两个问题:
1是如果第一个线程申请速度过快,其他所有线程都阻塞,一直是线程1在打印。
2是这样管理全局资源属实太麻烦了,每一个全局资源都需要新增三个变量和两个循环来管理。怎么样才能做成通用锁。

以前都是直接cv代码,没思考过这方面问题,一时半会还想不到办法。

离线

#1 2022-08-09 09:06:04

enqying
会员
注册时间: 2022-08-01
已发帖子: 7
积分: 37

Re: 【代码分享】一种解决全局资源访问冲突的方法以及两个未解决的问题

嵌入式os 线程管理方法(链表) 申请、优先级、 注册 、阻塞、注销(硬件线程 和软件线程管理应该一样),  你这位高手肯定能做到

离线

#2 2022-08-09 09:21:18

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 650
积分: 783
个人网站

Re: 【代码分享】一种解决全局资源访问冲突的方法以及两个未解决的问题

通用锁其实就是互斥锁。想减少阻塞就要加缓存,这里可以用环形队列来实现,printf把要print的内容添加到队列,负责串口输出的线程从队列里取出内容。
有读和写可以并行执行的队列,叫无锁环形队列;但写操作如果是并行的话,写操作还是要加锁的。

离线

#3 2022-08-09 09:56:01

enqying
会员
注册时间: 2022-08-01
已发帖子: 7
积分: 37

Re: 【代码分享】一种解决全局资源访问冲突的方法以及两个未解决的问题

高手

离线

楼主 #4 2022-08-09 11:01:08

游乐场
会员
注册时间: 2022-07-29
已发帖子: 54
积分: 172

Re: 【代码分享】一种解决全局资源访问冲突的方法以及两个未解决的问题

enqying 说:

嵌入式os 线程管理方法(链表) 申请、优先级、 注册 、阻塞、注销(硬件线程 和软件线程管理应该一样),  你这位高手肯定能做到

这颗芯片不适合做动态线程管理,有点不尊重芯片特色了。

离线

楼主 #5 2022-08-09 11:04:55

游乐场
会员
注册时间: 2022-07-29
已发帖子: 54
积分: 172

Re: 【代码分享】一种解决全局资源访问冲突的方法以及两个未解决的问题

@海石生风
看来我要找点rtos的代码研究研究了

离线

#6 2022-08-09 11:11:51

support_gxchip
Moderator
注册时间: 2022-07-26
已发帖子: 58
积分: 103

Re: 【代码分享】一种解决全局资源访问冲突的方法以及两个未解决的问题

感谢分享,算是第一个demo了
其实审批者可以给每个申请者计数或者设置优先级,总之软件可以根据具体情况灵活实现

离线

#7 2022-08-09 11:20:41

温良
会员
注册时间: 2022-08-09
已发帖子: 1
积分: 6

Re: 【代码分享】一种解决全局资源访问冲突的方法以及两个未解决的问题

游乐场哥哥 好厉害  mua~:)

离线

#8 2022-08-09 11:22:23

enqying
会员
注册时间: 2022-08-01
已发帖子: 7
积分: 37

Re: 【代码分享】一种解决全局资源访问冲突的方法以及两个未解决的问题

“其实审批者可以给每个申请者计数或者设置优先级,总之软件可以根据具体情况灵活实现”。审批者用全局数组(64)标识管理(计数、优先级)。。。。。rtos的一些理念可以用,游乐场加油,等看你的例子 。

离线

楼主 #9 2022-08-16 13:54:16

游乐场
会员
注册时间: 2022-07-29
已发帖子: 54
积分: 172

Re: 【代码分享】一种解决全局资源访问冲突的方法以及两个未解决的问题

互斥锁测试通过,现在以上两个问题可以确认解决。详细见https://whycan.com/t_8639.html/

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn