none
Volatile 在多任务编程中修饰局部变量有意义吗 RRS feed

  • 问题

  • 请教Volatile在多任务编程中,某个任务用作实时时钟的设置读写,所以需要读写外部实时时钟芯片的EPROM,在该任务的函数中,局部变量加上VolatiLe, 有何用处呢? 类似结构如下:
    ex: void aaa(void) {
      volative aVar = 0;
       aVar = bbb();
       switch (avar):
         case 0: do 0thing;
                  break;
         case 1: do 1thing;
                 break;  

          ....
         default: 
                  break;
       } 
     }
    2013年3月30日 1:38

答案

  • 有意义,当两个线程同时访问这个函数的时候,在aVar = bbb();后,每次都会从内存重新读取,而不会直接从寄存器读取。这样不会造成两个线程的aVar互相覆盖的问题。

    麻烦把正确答案设为解答。

    2013年4月1日 3:06
    版主

全部回复

  • 有意义,当两个线程同时访问这个函数的时候,在aVar = bbb();后,每次都会从内存重新读取,而不会直接从寄存器读取。这样不会造成两个线程的aVar互相覆盖的问题。

    麻烦把正确答案设为解答。

    2013年4月1日 3:06
    版主
  • 我感觉这样做那不就是所有的变量都必须是volatile 的吗? 局部变量在Stack中,每个线程都有自己的Stack吧
    2013年4月10日 1:30
  • 不是所有的都需要加,比如能够肯定某些函数一定在单线程调用,或者已经加锁。

    麻烦把正确答案设为解答。

    2013年4月10日 5:00
    版主