最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

利用测试并置位处理共享资源

工作和技术 crifan 3329浏览 0评论

声明:下列内容摘自吕进华整理的,uC/OS-II 2.0 的chm格式的电子书中。

2.18.2 测试并置位

    如果不使用实时内核,当两个任务共享一个资源时,一定要约定好,先测试某一全程变量,如果该变量是0,允许该任务与共享资源打交道。为防止另一任务也要使用该资源,前者只要简单地将全程变量置为1,这通常称作测试并置位(Test-And-Set),或称作TAS。TAS操作可能是微处理器的单独一条不会被中断的指令,或者是在程序中关中断做TAS操作再开中断,如程序清单2.5所示。

程序清单2.5 利用测试并置位处理共享资源

Disable interrupts;                              关中断

if (‘Access Variable’ is 0) {                  如果资源不可用,标志为0

    Set variable to 1;                           置资源不可用,标志为1

    Reenable interrupts;                         重开中断

    Access the resource;                         处理该资源

    Disable interrupts;                          关中断

    Set the ‘Access Variable’ back to 0;      清资源不可使用,标志为0

    Reenable interrupts;                         重新开中断

} else {                                            否则

    Reenable interrupts;                          开中断

/* You don’t have access to the resource, try back later; */

/* 资源不可使用,以后再试; */

}

    有的微处理器有硬件的TAS指令(如Motorola 68000系列,就有这条指令)

转载请注明:在路上 » 利用测试并置位处理共享资源

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (8)

  1. 回复gududesiling:书上的图片也比这上面的清晰多了,而且这本电子书是第一版(下面的第一本),这里面的源代码的版是uC/OS-II 2.0,而现在最新的是uC/OS-II 2.52,而它所对应的书是第二版,就是下面的中间这一本,讲得比第一版更详细和更好,很容易看懂。  --吕进华 2003年7月10日  于创新中心
    againinput414年前 (2011-05-03)回复
  2. 回复gududesiling:我确认了,我拷贝是没任何改动的。我手上的版本是:
    说明
          这是我从网上下载的uC/OS-II 2.0  Word文档的内容转化而来的。把它做成这样完全是为了大家学习的方便,希望大家会喜欢。
        我自己本身是个电子和电脑的爱好者,用C语言编写过一些小程序,也用单片机制作过一些小东西,不过那些东西都太简单。当我看见这个东西的时候,就觉得真的是时候了,真是好东西,如果能学会使用的话一定会受益非浅。如果可能的话,最好是能够去卖一本原书,因为看书比看电脑屏幕方便多了,还可以很好的收藏。
    againinput414年前 (2011-05-03)回复
  3. 不知道是不是版本的不同,我不相信邵贝贝出的书会出入那么大
    我用的版本是:《嵌入式实时操作系统uc/os-II(第二版)》
    2003年5月第一版,2007年9月第7次印刷
    gududesiling14年前 (2011-05-02)回复
  4. Set the ‘Access Variable’ back to 0;      恢复资源为未占用,标志为0
        Reenable interrupts;                         重新开中断
    gududesiling14年前 (2011-05-02)回复
  5. 百度博客限制字数,没办法,一点一点来吧
    Disable interrupts;                              关中断
    if (‘Access Variable’ is 0) {                  如果资源未占用,标志为0
        Set variable to 1;                           置资源已占用,标志为1
        
     
    gududesiling14年前 (2011-05-02)回复
  6. 也许是我语气不好,不过确实有一定的问题,我给你重写一下书中的注释:(和你的注释照照看)
     
    gududesiling14年前 (2011-05-02)回复
  7. 回复gududesiling:
    1. 这个哥们,既然你说我有抄错的地方,那麻烦你指出来啊。
    2.“此篇文章是根据邵贝贝的ucosii上面的”,本来就是的啊,我也注明了“下列内容摘自吕进华整理的,uC/OS-II 2.0 的chm格式的电子书中”。
    3.我刚回去对照了“uCOS-II 2.0.chm”,没看到有何不一样的。另外对你所说的我自己是否看懂,那就是我的事情了,和我拷贝内容,粘贴到这里,貌似没有什么关系吧?难道拷贝粘贴东西,并且说明了出处来源,也有错???希望收到你的回复。
    againinput414年前 (2011-04-29)回复
  8. 这一篇真是垃圾文章,全是错的,我想说的是,作者你自己是否能够看懂,此篇文章是根据邵贝贝的ucosii上面的,如果说照抄,也应该抄正确呀,真是杯具,可恨的是你让我在这浪费了半个小时。。。。。。。
    gududesiling14年前 (2011-04-25)回复
82 queries in 0.176 seconds, using 22.19MB memory