Здравствуйте, c-smile, Вы писали:
CS>Советую внимательно глянуть на код с volatile.
CS>Там продемонстрировано то что volatile не решает отдельную конкретную и нетривиальну проблему.
Там показано, что в многопоточной программе, даже с использованием примитивов синхронизации, volatile не дает ожидаемого от него эффекта. И если один раз volatile не срабатывает, то почему следует ожидать, что он сработает в остальных случаях?
CS>Но нигде Майерс не говорит о том что volatile не решает базовую проблему "указание компилятору на то что данная переменная можеть изменить значение вне normal flow программы".
А с этим я никогда и не спорил. Поэтому еще раз проясню свою позицию: я хочу увидеть реальные примеры (из реальных, а не тестовых примеров), когда использовались примитивы синхронизации, но приложение все равно работало не правильно до тех пор, пока не было использовано volatile. При этом меня не интересуют ни обработчики аппаратных прерываний, ни работа с железом через отображаемые в память порты ввода/вывода.
Прошу не приводить примеров, когда компилятору специальными ключами явно указывали, что ни одна функция не имеет побочных эффектов. Применение такого ключа в многопоточной программе, ИМХО, является проявлением
излишнего оптимизма программиста. Кроме того, такой пример я уже видел. Может есть что-то еще?
... << RSDN@Home 1.1.4 beta 3 rev. 185>>