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

2019-08-17 03:52发布

本帖最后由 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

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









友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
myh9970
1楼-- · 2019-08-17 06:37
自己顶一下!
heqinhan
2楼-- · 2019-08-17 09:26
这种情况应该不会发生吧,任务2没拿到信号量1,怎么能拿到信号量2呢
ARM学员
3楼-- · 2019-08-17 13:43
肯定不会呀,任务1获取到了信号量1时,任务2就不可能获取到信号量2,因为任务2在获取信号量1的时候就已经被阻塞了,而任务1和任务2最初在获取信号量1时是肯定有个先后顺序的。
myh9970
4楼-- · 2019-08-17 17:47
heqinhan 发表于 2017-7-3 17:09
这种情况应该不会发生吧,任务2没拿到信号量1,怎么能拿到信号量2呢

好像是你说的这样,我想法是这样产生的,我之前在做项目时出现了两个任务全都挂掉,其他任务正常运行,我采用变量累加看出来的,但不知道什么原因造成了两个任务同时挂掉了,我怀疑是这种情况造成的,两个任务都在访问flash时,代码中使用了两个锁,就像我描述的那样一个bsp层的一个app层的
myh9970
5楼-- · 2019-08-17 23:18
 精彩回答 2  元偷偷看……
myh9970
6楼-- · 2019-08-17 23:58
ARM学员 发表于 2017-7-3 17:11
肯定不会呀,任务1获取到了信号量1时,任务2就不可能获取到信号量2,因为任务2在获取信号量1的时候就已经被 ...

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

一周热门 更多>