之间是否存在差异:
__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编译器选项