Почему и энергозависимые модификаторы только для чтения являются взаимоисключающими?

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

Попробуйте:

cd /home/poojat/go/src/golang.org/x/tools
git checkout . 
git clean -fd
9
задан Jader Dias 28 December 2008 в 17:19
поделиться

3 ответа

Ни один readonly ни volatile модификаторы являются проникающими. Они относятся к самой ссылке, не свойствам объекта.

readonly ключевое слово утверждает — и осуществляет — который переменная не может изменить после инициализации. Переменная является маленьким блоком памяти, где ссылка хранится.

volatile ключевое слово говорит компилятору, что содержание переменной могло бы быть изменено несколькими потоками. Это препятствует тому, чтобы компилятор использовал оптимизацию (такую как чтение значения переменной в регистр и использование того значения по нескольким инструкциям), который мог бы вызвать проблемы с параллельным доступом. Снова, это только влияет на маленький блок памяти, где ссылка хранится.

Примененный этот путь, Вы видите, что они являются действительно взаимоисключающими. Если что-то только для чтения (может только быть записан в однажды, при инициализации или конструкции), то это не может также быть энергозависимо (может быть записан в в любое время несколькими потоками).


Что касается Вашей озабоченности по поводу кэширования проблем, IIRC, существуют довольно строгие правила о том, когда компилятор может кэшировать результат вызова свойства. Следует иметь в виду, что это - вызов метода, и это - довольно тяжелая оптимизация (с точки зрения компилятора) для кэширования ее значения и пропуска, называя его снова. Я не думаю, что это - что-то, чем необходимо коснуться себя чрезмерно очень.

16
ответ дан 4 December 2019 в 12:22
поделиться

Поле только для чтения может только быть записано, когда объект сначала создается. Поэтому не будет никакой проблемы кэширования о ЦП, потому что поле неизменно и не может возможно измениться.

1
ответ дан 4 December 2019 в 12:22
поделиться

В то время как сама ссылка могла бы быть ориентирована на многопотоковое исполнение, ее свойства не могли бы. Думайте о том, что произошло бы, если бы два потока пытались одновременно выполнить итерации через Список, содержавший в Вашем ссылочном объекте.

0
ответ дан 4 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

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