用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧计算机理论

实时嵌入式系统中的一种互斥方法

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 12:06:19
必担心会发生意外。但是这种方法的效率有点低下,执行Func()时已经是最高优先级状态了,却还要再设置,浪费了CPU时间,在嵌套次数较多时效率问题将更加严重。另一方面我们不能轻易将函数Func()中的互斥手段去掉,因为这要考虑在其它没提供互斥手段的情况下调用Func()。基于上述原因,我们引入一种高效的方法——嵌套计数法。

3.3最高优先级法的嵌套计数实现
    先来定义操作规则: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()的实现代码。
[1] Labrosse Jean J,uc/OS-II-源码公开的实时嵌入式操作系统,邵贝贝译,北京:中国电力出版社,2001.
[2] 孔祥营等,嵌入式实时操作系统VxWorks及其开发环境Tornado,北京:中国电力出版社,2001.

上一页  [1] [2] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:6,218.75000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号