Здравствуйте, Vet, Вы писали:
Vet>В объекте класса есть переменная, которая используется двумя потоками.
Vet>Один из потоков иногда меняет ее значение.
Vet>Есть ли необходимость в этом случае делать переменную как volatile.
Vet>И зависит ли ответ от того, сздан ли объект класса на стеке или в динамической памяти.
Vet>Вопрос вызван тем, что у Рихтера прочитал, что если глобальная переменная используется
Vet>разными потоками, то она обязана быть volatile. Вот меня и рабирают сомнения нужно ли
Vet>тоже самое делать для переменных(членов) класса.
Да, обязательно, иначе оптимизатор тебе такого наворотит — не обрадуешься.
The volatile keyword is a type qualifier used to declare that an object can be modified in the program by something other than statements, such as the operating system, the hardware, or a concurrently executing thread.
Желательно еще установку этой переменной выполнять с помощью InterlockedExchange.
Собственно так как эта функция объявлена как
LONG InterlockedExchange(
LPLONG volatile Target, // value to exchange
LONG Value // new value
);
без объявления volatile у тебя ничего и не получится.