Есть ли разница между:
__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
Я прав в своих предположениях?
Примечание: я использую / volatile: MS компилятор в Visual Studio
Задача ещё не решена.
Других решений пока нет …