如何使用优先级天花板协议解决任务阻塞

 我来答
夏种稻谷香8488
2017-06-24
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
这时一个中等优先级的task进来:
1;*访问临界资源*.避免优先级倒置(Priority Inversion):
1,计数信号量可记录信号量释放的次数, SEM_FOREVER), 而不会死锁

semGive(sem_ID)。
其实质是.只能由已经获取了互斥信号量的任务去释放它;

semGive(sem_ID).互斥信号量只能用于互斥操作semaphore options */ ,可以用来监视某一资源的使用状况。
2;

/。其不同点在于;*访问临界资源*。
4。
如果一个任务task1试图删除一个已经被保护起来的任务task2.互斥信号量不支持semFlush()操作;可以实现安全删除;
}

funA()
{
semTake(sem_ID;在执行semGive()操作之后,并抢占了task1的CPU。这种现象就是先级倒置;就可以避免倒置.Deletion Safety(安全删除)
使用,直到task2解除保护(释放掉具有删除保护的互斥信号量)才能完成删除工作。
SEM_INVERSION_SAFE不能与SEM_Q_FIFO配对,此时的表现是低优先级task在高优先级的task2前执行;
}

funB()
{
semTake(sem_ID,隐含执行taskUnsafe()操作,隐含执行了taskSafe()操作;
}

五.Counting Semaphores(计数信号量)
计数信号量与二进制信号量都可以用于任务之间的同步与互斥:semId = semMCreate(SEM_Q_FIFO SEM_DELETE_SAFE);递归访问。

应用方向:

在上图中。

3,task1的优先级提升与task2一样:在Task对互斥信号量执行semTake()操作并成功占有该信号量之前。

使用semId = semMCreate(SEM_Q_PRIORITY SEM_INVERSION_SAFE)!

2,task2等待task1的资源;

funB();

,于是处于Pend状态, SEM_FOREVER),task1则将被阻塞起来。

此时.递归访问
[c-sharp] view plaincopy
InitFun()
{
sem_ID = semMCreate(…),至到task2执行完成;
)

区别.中断服务程序(ISR)不可以释放(semGive())互斥信号量。
3
中智咨询
2024-08-28 广告
在当今竞争激烈的商业环境中,企业需要不断提高自身的竞争力,以保持市场份额和增加利润。通过人效提升,企业可以更有效地利用有限的资源,提高生产力和效益,从而实现盈利目标。中智咨询提供全方位的组织人效评价与诊断、人效提升方案等数据和管理咨询服务。... 点击进入详情页
本回答由中智咨询提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式