Модель памяти Java применима к действиям, а не к операторам - PullRequest
0 голосов
/ 30 октября 2018

Из блога А. Шипилева я узнал, что JMM применимо к действиям, а не к заявлениям с указанным кодом и заявлению

… они говорят, что g = 1 происходит - до int lg = g. Этот поезд разрушает рассуждения, логически придя к заключению, что int lx = x всегда будет видеть x = 1 (так как x = 1 hb g = 1, и int lg = g hb int lx = x тоже). Это очень простая ошибка, и вы должны иметь в виду, что это происходит раньше (и другие порядки в формализме JMM) применяется к действиям, а не к заявлениям.

https://shipilev.net/blog/2016/close-encounters-of-jmm-kind/#pitfall-volatiles-wrong

У меня сложилось впечатление, что оба одинаковы. Есть ли какая-то основная разница, по которой я скучаю?

int x;
volatile int g;

void m() {
  x = 1;
  g = 1;
}

void r() {
  int lg = g;
  int lx = x;
}
...