Re[8]: boost::thread
От: MaximE Великобритания  
Дата: 22.06.04 09:56
Оценка:
maq wrote:

>>> ME>P.S. В этом случае volatile не нужен.

>>> Почему?
>
> ME>Потому что volatile был придуман для регистров устройств и в C/C++ он не имеет никакого отношения к threading.
> ME>Подробности можешь разыскать на deja.com по ключевым словам "volatile terekhov".
>
> Тогда получается что нет способа гарантированно читать переменную в которую могут писать несколько потоков,
> даже если она защищена критичиской секцией?

Доступ к ф-циям примитивов синхронизации обычно является вызовом ф-ции, например EnterCriticalSection(). После вызова ф-ции компилятор не может делать никаких предположений о состоянии переменных, поэтому при следующем доступе переменная будет зачитана из памяти, независимо от volatile'ности. volatile ни достаточен, ни полезен.

Можно рассматривать volatile как антиоптимизацию в mutlithreaded programming. И как одно из самых распространенных заблуждений.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.