互锁函数的变量必须在本机C ++中声明为volatile

时间:2016-08-10 05:30:00

标签: c++ volatile interlocked

之间是否存在差异:

    __declspec(align(8)) long long variable1; //assume shared among threads
    InterlockedIncrement64(&variable1);

而且:

    __declspec(align(8)) long long volatile variable2;//assume shared among threads
    InterlockedIncrement64(&variable2);

我的猜测是他们在这种情况下的操作完全相同。我认为唯一的区别是,如果在没有互锁功能的情况下访问variable1,则不保证当前值是variable2,而long long x = variable1; //Not guaranteed to be the most recent value when accessed long long y = variable2; //Guaranteed to be the most recent value when accessed 保证是当前值。例如:

{{1}}

我的假设是否正确? 注意:我在visual studio中使用/ volatile:ms编译器选项

0 个答案:

没有答案