Re[2]: volatile у переменной класса
От: Tom Россия http://www.RSDN.ru
Дата: 15.01.05 16:04
Оценка: +1 -1
Здравствуйте, MaximE, Вы писали:

ME>Vet wrote:


>> В объекте класса есть переменная, которая используется двумя потоками.

>> Один из потоков иногда меняет ее значение.
>> Есть ли необходимость в этом случае делать переменную как volatile.
>> И зависит ли ответ от того, сздан ли объект класса на стеке или в динамической памяти.
>>
>> Вопрос вызван тем, что у Рихтера прочитал, что если глобальная переменная используется
>> разными потоками, то она обязана быть volatile. Вот меня и рабирают сомнения нужно ли
>> тоже самое делать для переменных(членов) класса.

ME>Рихтер ошибался.


ME>volatile не имеет никакого отношения к multithreading, поэтому его применение в этой ситуации не только бесполезно, но может быть и вредно, так как с volatile компилятор не сможет соптимизировтать доступ к этой переменной. Но если один из потоков изменяет переменную, синхронизация при помощи мютексов обязательна.


ME>--

ME>Maxim Yegorushkin

Абсолютно неверный и опасный совет. Как раз volatile тут необходим, как в прочем и желательна защита обьекта при помощи примитивов синхронизации. volatile нужен дабы избежать лишней оптимизации (компилятор может моложить переменную в регистр, и защищая её или нет, но другой поток об том, что переменная изменилась — не узнает никогда, или несвоевременно)
Народная мудрось
всем все никому ничего(с).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.