Как делает энергозависимый, на самом деле работают?

Отмечание переменной как volatile в Java гарантирует, что каждый поток видит значение, которое было в последний раз записано в него вместо некоторого устаревшего значения. Я задавался вопросом, как это на самом деле достигается. JVM испускает специальные инструкции, которые сбрасывают наличные деньги ЦП или что-то?

9
задан fredoverflow 22 April 2010 в 20:58
поделиться

2 ответа

Насколько я понимаю, это всегда выглядит так, как если бы кеш был очищен после записи, и всегда выглядит так, как будто чтение выполняется прямо из памяти при чтении. Эффект состоит в том, что поток всегда будет видеть результаты записи из другого потока и (согласно модели памяти Java) никогда не будет кэшированного значения. Однако фактическая реализация и инструкции ЦП будут отличаться от одной архитектуры к другой.

Это не гарантирует правильности, если вы увеличиваете переменную более чем в одном потоке или проверяете ее значение и предпринимаете какие-либо действия, поскольку, очевидно, фактической синхронизации нет. Как правило, вы можете гарантировать правильное выполнение только в том случае, если в переменную записывается только поток, а все остальные читают.

Также обратите внимание, что 64-битная НЕЛЕТУЧАЯ переменная может быть прочитана / записана как две 32-битные переменные, поэтому 32-битные переменные являются атомарными при записи, а 64-битные - нет. Одна половина может быть записана перед другой, так что считываемое значение может отличаться от старого или нового значения.

Это очень полезная страница из моих закладок:

http: //www.cs.umd.edu / ~ pugh / java / memoryModel /

9
ответ дан 4 December 2019 в 21:09
поделиться

Что именно происходит, зависит от процессора. Как правило, существуют инструкции по ограничению памяти. Очистка всего кеша, очевидно, будет очень дорогостоящей - в аппаратном обеспечении есть протоколы согласованности кеша.

Также важно, чтобы не производились определенные оптимизации для доступа к полям. Компилятор важен при рассмотрении многопоточности, не думайте только об оборудовании.

1
ответ дан 4 December 2019 в 21:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: