Re[3]: Вопрос на засыпку: синхронизация на разных volatile
От: maxkar  
Дата: 17.07.13 13:22
Оценка:
Здравствуйте, seno, Вы писали:


S>В том то и дело, что есть ограничения. Семантика volatile такова, что его нельзя реордерить, и его чтение/запись выступают в роли "полупроницаемых" барьеров. Поэтому для кода:


Забудьте про "нельзя реордерить". В Memory model реордеринги идут как "опциональное" объяснение и в формальной модели нигде не используются. В формальной модели используются happens-before relationship, для которого важно читать одну и ту же переменную. Запись/чтение разных volatile такую связь не создают, поэтому там можно увидеть все, что угодно. И связано это может быть не с реордерингами, а с кэшами.

Вообще, для объяснения почти всей JMM (а может и всей) не нужны никакие переупорядочивания. Нужна "виртуальная NUMA-машина". Читать здесь пост от Maxim Karvonen (во второй половине поста). На практике (в реальных машинах) в некорректно-синхронизированных программах могут далеко не все эффекты наблюдаться (даже допускаемые NUMA-машиной), но это уже от конкретной JVM и архитекруты зависит.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.