Здравствуйте, MaximE, Вы писали:
ME>Vet wrote:
>> В объекте класса есть переменная, которая используется двумя потоками. >> Один из потоков иногда меняет ее значение. >> Есть ли необходимость в этом случае делать переменную как volatile. >> И зависит ли ответ от того, сздан ли объект класса на стеке или в динамической памяти. >> >> Вопрос вызван тем, что у Рихтера прочитал, что если глобальная переменная используется >> разными потоками, то она обязана быть volatile. Вот меня и рабирают сомнения нужно ли >> тоже самое делать для переменных(членов) класса.
ME>Рихтер ошибался.
ME>volatile не имеет никакого отношения к multithreading, поэтому его применение в этой ситуации не только бесполезно, но может быть и вредно, так как с volatile компилятор не сможет соптимизировтать доступ к этой переменной. Но если один из потоков изменяет переменную, синхронизация при помощи мютексов обязательна.
ME>-- ME>Maxim Yegorushkin
Абсолютно неверный и опасный совет. Как раз volatile тут необходим, как в прочем и желательна защита обьекта при помощи примитивов синхронизации. volatile нужен дабы избежать лишней оптимизации (компилятор может моложить переменную в регистр, и защищая её или нет, но другой поток об том, что переменная изменилась — не узнает никогда, или несвоевременно)