Могут ли r1 == 0 и r2 == 0 возникнуть без изменения в этой Java-программе?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Могут ли r1 == 0 и r2 == 0 возникнуть без изменения в этой Java-программе?

Сообщение Anonymous »

Правильно ли я понимаю, что если я запускаю run1() и run2() параллельно, то результат r1 == 0 и r2 == 0 невозможен при любых обстоятельствах, даже если a и b не являются энергозависимыми?

Код: Выделить всё

public class Example {

private int a = 0;
private int b = 0;

public void run1() {
b = 1; // (1)
int r2 = a; // (2)
}

public void run2() {
a = 2; // (3)
int r1 = b; // (4)
}
}
Мой вывод основан на этом утверждении из модели памяти Java, стр. 17.4.5: «Если x и y — действия одного и того же потока и x стоит перед y в порядке программы, то hb(x, y)».
  • (1) и (2) — действия одного и того же потока, и (1) стоит перед (2) в порядке программы. Следовательно, (1) происходит раньше (2).
  • Аналогично (3) происходит раньше (4).
Эта программа содержит всего четыре действия, что дает 4! возможных выполнения. Анализируя каждое возможное выполнение, я пришел к выводу, что любое выполнение, ведущее к r1 == 0 и r2 == 0, нарушит описанные выше отношения «происходит до», и поэтому является незаконным.

Подробнее здесь: https://stackoverflow.com/questions/792 ... va-program
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»