|
楼主 |
发表于 2010-9-9 11:09:11
|
显示全部楼层
回复【5楼】A-smith
额我想了想一般情况下确实是这样不会出现表中情况 但有例外
如果对信号量的操作都是通过 ossemaccept ossempost ossempend ossemcreat ossemdel 这5个的话一定不会出现
oseventcnt 和 任务等待列表里的任务数目 同时 >= 1 一定有一个 <= 1
不过有些时候可以人为的改变oseventcnt 用最快的速度增加这个资源的可申请数量 又不想引起任务的切换 可以直接改oseventcnt
就可能引起表中的情况了 不过这方法一般都不用,属于脱离rtos思想。
-----------------------------------------------------------------------
我也是这个样子想的,OSEventCnt 和 任务等待列表里的任务数目至少有一个为0.
您最后的一个想法是人为的修改OSEventCnt的数值,在有等待任务的情况下,
实现代码为;
pevent->OSEventCnt=cnt;
OSSemQuery(*pevent,*pdata);
然后到OS_SEM_DATA里查询。应该应会有这种情况。等待任务表里有任务,而且OSEventCnt>0;
不过应该很快就会因为目前有可以被申请的信号量,而使的请求信号量的任务进入就绪列表的。
所这您的所述也应该是一个“暂态”才对。
呵呵……谢谢两位。xuxi2009&A-smith |
|