代码之家  ›  专栏  ›  技术社区  ›  Suma

声明为volatile的InterlockedIncrement参数的效果如何

  •  3
  • Suma  · 技术社区  · 15 年前

    InterlockedIncrement

    4 回复  |  直到 15 年前
        1
  •  8
  •   Bart van Ingen Schenau    15 年前

    可能的影响很小。最可能的意图是允许用户通过 volatile

        2
  •  4
  •   Suma    14 年前

    void TestV(int *a)
    {
      *a = 1;
    }
    
    void Test()
    {
      volatile int a = 0;
      TestV(&a);
    }
    

    声明就是这样,您可以执行以下操作:

    volatile LONG a = 0;
    
    InterlockedIncrement(&a);
    

        3
  •  0
  •   Puppy    15 年前

    volatile参数阻止编译器进行优化,从而阻止对内存的读取。只要代码的可见效果相同,编译器就可以进行它喜欢的任何优化,但是在多线程场景中不考虑这些效果,只考虑单个线程。volatile关键字告诉编译器,这个变量可能被修改或从外部的未知源读取,编译器无法摆脱它或省略对它的内存访问。

        4
  •  -2
  •   jv42    15 年前

    简而言之,volatile意味着“这个变量可能在这个程序之外被修改”。

    换言之,这意味着变量的值可以在代码中更改,而无需任何相关指令。它通常用于低级别的I/O,例如,寄存器或缓冲区的值可以由硬件设置。