документация Oracle на атомном доступа (в http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html) говорит, что это:.Java летучие и побочные эффекты
«летучий переменная устанавливает происходит, прежде чем отношения ... Это означает, что ... когда нить читает изменчивую переменную, она видит не только последнее изменение волатильности, но и побочные эффекты кода, которые привели к изменению ».
У меня возникают проблемы с обволакиванием головы. Я понимаю, как работают изменчивые переменные (в> = Java 5), но мне интересно, как Java решает, какой побочный эффект «подвел» к изменению изменчивой переменной.
Итак, я думаю, мой вопрос: какие побочные эффекты даны этой гарантии?
EDIT:
Так я узнал, что если нить А изменяет летучий переменную, а затем поток B читает все записи из потока А, случившиеся перед записью в энергонезависимую переменной являются «сделаны когерентным» по отношению к потоку B (т.е. кэшированные значения переменных, подлежащих вышеупомянутой записи потоком A, недействительны в потоке B). Поправьте меня если я ошибаюсь.
У вас есть неправильное представление о том, как работает кеш. НО volatile write DOES FLUSH * записывает буферы *, а не кеш (кеш может быть сброшен вручную, но обычно вы этого не хотите) – bestsss
Каково мое заблуждение? Похоже, что ваш ответ будет отличаться от Tom Hawtin's - может быть, вы хотите написать альтернативный ответ? –
нет, это не противоречит его ответу, хотя он (его ответ) не совсем завершен. Кэш не сбрасывается (это просто разрушает любую производительность), но только модифицированные строки кэша становятся согласованными (просто). Кроме того, он не гарантирует, что спекулятивные читает прошлую запись (это очень важно). Поэтому, когда CPU возобновляет работу, все остальные могли бы/могли бы знать об этой записи (и все предыдущие записи). Вообще говоря, все процессоры делают запись доступной/видимой в точке * some *, но w/volatile write это просто * сейчас *. Я не думаю, что SO - хорошая область, чтобы объяснить, как работает когерентность кэша. – bestsss