Почему модель памяти Java позволяет читать и наблюдать за будущими операциями записи?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему модель памяти Java позволяет читать и наблюдать за будущими операциями записи?

Сообщение Anonymous »

Похоже, есть аналогичный вопрос (спецификация Java: чтение видит запись, которая происходит позже в порядке выполнения), но он посвящен другому примеру.

Модель памяти Java гласит в §17.4.8:

Хотя разрешение чтениям видеть записи, которые происходят позже в порядке выполнения, иногда нежелательно, сильный>это тоже иногда необходимо.

Затем он ссылается на программу и трассировку выполнения из §17.4.5 как пример, когда такое поведение необходимо.< /p>
Вот программа:



Тема 1
Тема 2




B = 1;
A = 2;


r2 = A;
r1 = B;



И соответствующая трассировка выполнения:

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

1: r2 = A;  // sees write of A = 2
3: r1 = B;  // sees write of B = 1
2: B = 1;
4: A = 2;
Спецификация объясняет:

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

Может ли кто-нибудь помочь разъяснить, что это значит? Почему мы не можем просто объявить незаконными выполнения, которые позволяют операциям чтения наблюдать за будущими операциями записи?
Например, если мы запретим такие выполнения, разве мы все равно не сможем выдать результат r1? == 1 и r2 == 2 посредством следующего законного исполнения?

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

B = 1;
A = 2;
r2 = A;  // sees write of A = 2
r1 = B;  // sees write of B = 1
Что будет потеряно или сломано, если мы ограничим модель запретом операций чтения на будущие записи?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ure-writes
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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