首 页 用户登录 | ![]() |
|||
|
|||
按字母检索 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
按声母检索 | A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | R | S | T | W | X | Y | Z | 数字 | 符号 |
|
![]() |
您的位置: 5VAR论文频道 → 论文中心 → 计算机论文 → 计算机理论 |
|
|||||
实时嵌入式系统中的一种互斥方法 | |||||
收集整理:佚名 来源:本站整理 时间:2009-01-10 12:06:19 点击数:[] ![]() |
|||||
必担心会发生意外。但是这种方法的效率有点低下,执行Func()时已经是最高优先级状态了,却还要再设置,浪费了CPU时间,在嵌套次数较多时效率问题将更加严重。另一方面我们不能轻易将函数Func()中的互斥手段去掉,因为这要考虑在其它没提供互斥手段的情况下调用Func()。基于上述原因,我们引入一种高效的方法——嵌套计数法。 先来定义操作规则:COUNT为系统中的全局变量,初始化为0。 PriorityProtect() { if(!COUNT) ……(1) 利用具体的系统调用把当前任务设成最高优先级 ……(2) COUNT++; ……(3) } UnPriorityProtect() { COUNT--;……(4) if(!COUNT) ……(5) 利用具体的系统调用把当前任务设成原先的优先级……(6) } 再来分析一下这种方法的安全性。COUNT是全局变量,对它的访问要防止竞争条件。但巧妙的是一旦我们把任务用操作系统原语调用设成最高优先级后,对COUNT的访问将是独占的;一个任务首次调用PriorityProtect()时在语句(1)处有竞争条件,但一次只能有一个任务通过(2)处的原语成为最高优先级,只要我们正确地配对使用这两个函数,当这个任务最终退出最高优先级状态时COUNT必为0,并不影响其它任务在(1)处的判断。这种方法的高效性也是明显的,在嵌套使用的里层仅仅进行嵌套计数的计算,并不用进行优先级的设置。 4 结论 尽管不同的实时嵌入式操作系统给用户提供的系统调用接口不尽相同,但是它们所准遵循的基本原理都是相同的。上述关于禁止任务抢占的普通实现以及嵌套计数实现提供的都是实现思想,在实际应用中很容易结合所使用的具体的操作系统写出PriorityProtect()和UnPriorityProtect()的实现代码。 Tags: |
提供人:佚名 | |
【返回上一页】【打 印】【关闭窗口】 |
![]() |
5VAR论文频道 |
![]() |
5VAR论文频道 |
![]() |
关于本站 -
网站帮助 -
广告合作 -
下载声明 -
网站地图
Copyright © 2006-2033 5Var.Com. All Rights Reserved . |