2016-02-09 9 views
0

Следующая цитата взята из this tutorial.Что именно подразумевается под «побочными эффектами» кода?

Я не могу понять последнюю строку абзаца (на которую я применил жирный шрифт). Что означает побочные эффекты кода?

Атомные действия не могут чередоваться, поэтому их можно использовать без страха вмешательства потока. Однако это не устраняет необходимость синхронизации действий атома, поскольку ошибки согласованности памяти все еще возможны. Использование изменчивых переменных снижает риск ошибок согласованности памяти, поскольку любая запись в изменчивую переменную устанавливает связь между событиями и последующими чтениями этой же переменной. Это означает, что изменения в изменчивой переменной всегда видны для других потоков. Более того, это также означает, что когда поток читает изменчивую переменную, он видит не только последнее изменение волатильности, но и побочные эффекты кода, которые привели к изменению.

+0

http://stackoverflow.com/questions/9169232/java-volatile-and-side-effects?rq=1 – Thilo

ответ

3

«Побочный эффект» означает, что поток обновляет некоторую ячейку памяти вне ее собственного стека. В основном это означает, что он изменил состояние какого-либо объекта в куче.

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

1

Побочный эффект относится просто к модификации какого-то государства - например:

  • Изменение значения переменной;
  • Написание некоторых данных на диск;
  • Включение или отключение кнопки в пользовательском интерфейсе.

Таким образом, в последней строке поток будет видеть любые изменения состояния, вызванные побочным эффектом кода, выходящим за пределы только того, что читается изменчивой переменной.

+2

Я предполагаю, что в этом контексте «побочные эффекты» относятся конкретно к состоянию памяти. – shmosel