计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

实时嵌入式系统中的一种互斥方法(1)(2)

2015-05-13 01:41
导读:PriorityProtect(); ……//代码1 Func();//函数调用 ……//代码2 UnPriorityProtect(); 而函数Func()如下定义: Func() { ……//代码3 PriorityProtect(); ……//代码4 UnPrior

PriorityProtect();
……//代码1
Func();//函数调用
……//代码2
UnPriorityProtect();
而函数Func()如下定义:
Func()
{
……//代码3
PriorityProtect();
……//代码4
UnPriorityProtect();
……//代码5
}
当Func()执行完时,任务A的优先级被设回了原先的优先级,代码2将受不到保护!因此,我们需要对函数PriorityProtect()和UnPriorityProtect()进行改造:函数PriorityProtect()需返回设置最高优先级之前任务的优先级,而函数UnPriorityProtect()却不一定总是设置任务原先的优先级,它设置的是与之配对的PriorityProtect()返回的优先级。这两个函数都是成对使用的,不管嵌套使用了多少次都不会出错,举例如下:
OldPriority=PriorityProtect();
……//代码1
Func();//函数调用
……//代码2
UnPriorityProtect(OldPriority);
而函数Func()如下定义:
Func()
{
int OldPriority;
……//代码3
OldPriority =PriorityProtect();
……//代码4
UnPriorityProtect(OldPriority);
……//代码5
}
这样在函数Func()执行完后任务仍处于最高优先级状态,代码2仍受到保护,符合程序员的意图,程序员不必担心会发生意外。但是这种方法的效率有点低下,执行Func()时已经是最高优先级状态了,却还要再设置,浪费了CPU时间,在嵌套次数较多时效率问题将更加严重。另一方面我们不能轻易将函数Func()中的互斥手段去掉,因为这要考虑在其它没提供互斥手段的情况下调用Func()。基于上述原因,我们引入一种高效的方法——嵌套计数法。
共2页: 1 [2] 下一页 论文出处(作者):
定性仿真综述
谈信息经济与知识经济
上一篇:巧用数组实现长整数的精确计算(1) 下一篇:没有了