OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6642|回复: 13

ucosiii中造成两任务互锁的情况

[复制链接]

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2016-7-25
在线时间
24 小时
发表于 2017-7-3 17:03:55 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 myh9970 于 2017-7-3 17:33 编辑

问题1、在ucosiii中对于共享资源的访问,正常写法是加信号量(阻塞,持续等待)对其进行访问,如果两个任务都对同一共享资源访问的情况下,不会造成两任务互锁情况,因为在等待过程中系统会将该任务挂起,对吧?
问题2,在ucosiii中要是对共享资源的访问,加两个锁,一个锁套着另一个锁(下面配个简图),在两个任务都对该共享资源进行访问,是不是就可能会造成两任务互锁的情况,我做实验没有做出来,问一下原子哥和大家,理论上是不是存在这样的可能。即任务1拿到信号量1但是没有拿到信号量2,任务2拿到信号量2,没有拿到信号量1时,两个任务永远也访问不了共享资源,只会进行交替挂起,两个任务也不会再进行运行了。
问题3、都有什么情况下,会造成两个任务的互锁(两任务都不在运行,其他任务均正常运行)。
----------------------------------------
任务1

获取信号量1
获取信号量2

访问共享资源

释放信号量2
释放信号量1
--------------------------------------
--------------------------------------
任务2
获取信号量1
获取信号量2

访问共享资源

释放信号量2
释放信号量1

-------------------------------------









正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2016-7-25
在线时间
24 小时
 楼主| 发表于 2017-7-3 17:06:54 | 显示全部楼层
回复

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2015-3-17
在线时间
22 小时
发表于 2017-7-3 17:09:27 | 显示全部楼层
这种情况应该不会发生吧,任务2没拿到信号量1,怎么能拿到信号量2呢
回复

使用道具 举报

28

主题

133

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2016-11-22
在线时间
66 小时
发表于 2017-7-3 17:11:59 | 显示全部楼层
肯定不会呀,任务1获取到了信号量1时,任务2就不可能获取到信号量2,因为任务2在获取信号量1的时候就已经被阻塞了,而任务1和任务2最初在获取信号量1时是肯定有个先后顺序的。
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2016-7-25
在线时间
24 小时
 楼主| 发表于 2017-7-3 17:15:20 | 显示全部楼层
heqinhan 发表于 2017-7-3 17:09
这种情况应该不会发生吧,任务2没拿到信号量1,怎么能拿到信号量2呢

好像是你说的这样,我想法是这样产生的,我之前在做项目时出现了两个任务全都挂掉,其他任务正常运行,我采用变量累加看出来的,但不知道什么原因造成了两个任务同时挂掉了,我怀疑是这种情况造成的,两个任务都在访问flash时,代码中使用了两个锁,就像我描述的那样一个bsp层的一个app层的
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2016-7-25
在线时间
24 小时
 楼主| 发表于 2017-7-3 17:16:45 | 显示全部楼层
那有什么情况会造成两个任务死掉,其他任务正常运行的情况吗?
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2016-7-25
在线时间
24 小时
 楼主| 发表于 2017-7-3 17:17:12 | 显示全部楼层
ARM学员 发表于 2017-7-3 17:11
肯定不会呀,任务1获取到了信号量1时,任务2就不可能获取到信号量2,因为任务2在获取信号量1的时候就已经被 ...

那有什么情况会造成两个任务死掉,其他任务正常运行的情况吗?
回复

使用道具 举报

28

主题

133

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2016-11-22
在线时间
66 小时
发表于 2017-7-3 17:21:08 | 显示全部楼层
myh9970 发表于 2017-7-3 17:17
那有什么情况会造成两个任务死掉,其他任务正常运行的情况吗?

任务1和任务2获取信号量的顺序相反就有可能了
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2016-7-25
在线时间
24 小时
 楼主| 发表于 2017-7-3 17:25:26 | 显示全部楼层
ARM学员 发表于 2017-7-3 17:21
任务1和任务2获取信号量的顺序相反就有可能了

不太理解啊,可以详细说一下嘛,获取顺序相反不太理解怎么回事
回复

使用道具 举报

28

主题

133

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2016-11-22
在线时间
66 小时
发表于 2017-7-3 17:32:18 | 显示全部楼层
myh9970 发表于 2017-7-3 17:25
不太理解啊,可以详细说一下嘛,获取顺序相反不太理解怎么回事

任务1---------------------------
       获取信号量1
       获取信号量2
......
任务2--------------------------
      获取信号量2
      获取信号量1
......
就是这种情况。
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2016-7-25
在线时间
24 小时
 楼主| 发表于 2017-7-3 17:35:03 | 显示全部楼层
ARM学员 发表于 2017-7-3 17:32
任务1---------------------------
       获取信号量1
       获取信号量2

代码不是这样写的,应该不是这种情况造成的,但两个任务确实都挂掉了,其他任务运行良好。
回复

使用道具 举报

28

主题

133

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2016-11-22
在线时间
66 小时
发表于 2017-7-3 17:36:33 | 显示全部楼层
本帖最后由 ARM学员 于 2017-7-3 17:38 编辑
myh9970 发表于 2017-7-3 17:35
代码不是这样写的,应该不是这种情况造成的,但两个任务确实都挂掉了,其他任务运行良好。

知道UCOS内核是怎么运行的吗,你清楚之后应该就不会出现这种问题了。具体的我也没看你的代码,不知道什么情况。至少我不会用两个信号量来实现同步,我会用事件标志组来实现。
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2016-7-25
在线时间
24 小时
 楼主| 发表于 2017-7-3 17:39:13 | 显示全部楼层
ARM学员 发表于 2017-7-3 17:36
知道UCOS内核是怎么运行的吗,你清楚之后应该就不会出现这种问题了。具体的我也没看你的代码,不知道什么 ...

对于内核理解不是很深刻,谢谢你啊!
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2016-7-25
在线时间
24 小时
 楼主| 发表于 2017-7-4 08:43:59 | 显示全部楼层
ARM学员 发表于 2017-7-3 17:36
知道UCOS内核是怎么运行的吗,你清楚之后应该就不会出现这种问题了。具体的我也没看你的代码,不知道什么 ...

我也不会,可是工程代码就是这样实现的,我在调试前辈代码过程中发现的,代码本身运行没有问题,但是在其中一个任务中又添加了一个对flash访问的一些代码,就出现问题了,一个任务在写,另一个任务也在写出现了这样的问题,我觉的理论上是不应该出现问题的,我没有用过两个信号量的情况,特此来寻医问药,主要还是想了解一下,都有哪些情况会造成两个任务挂掉,其他任务可以正常运行的情况,不考虑删除任务。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-17 05:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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