powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JMM ликбез
10 сообщений из 10, страница 1 из 1
JMM ликбез
    #39375568
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Читаю http://www.javaspecialist.ru/2011/06/java-memory-model.html Отношение happens-before так же накладывает сильные ограничения на reordering. С точки зрения потока Y все операцие произошедшие до точки happens-before в потоке X он может рассматривать как операции свершившиеся в своем собственном потоке. Т.е. никакого логического reordering по сравнению с прямым порядком в исходном коде с точки зрения потока Y быть не может.

Если взглянуть внимательнее на границу happens-before с точки зрения reordering для потока Y, то никакие операции располагающиеся выше границы happens-before в потоке X, не могут выполнится ниже границы happens-before в результате reordering, однако, операциям, находящимся ниже границы, разрешено выполнение до неё. Более наглядно это изображено на рисунке.


и такая картинка там имеется:


Оба абазаца не понял.

По первому абазацу:
1. Что такое логический реордеринг?
(автор имеет ввиду, то что все операции просто завершились к моменту HB? или обязательно он увидит, что строка 3 выполнится раньше строки 4? хотя я тут вообще не понимаю. Ведь я так понимаю мысинкаемся только в момент HB. В общем я не понял, что хотел сказать автор)

2. Вот Картинка вообще в ступор вгоняет.

Если поменять местами 3 и 4 строка, то работать ничего не будет, а вот если 4 и 3, то всё будет огонь. Что за бред?


P.S. Что такое реордеринг, я знаю
...
Рейтинг: 0 / 0
JMM ликбез
    #39375578
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем же внизу есть комментарии, спросите у автора напрямую, будет быстрее может.
Ну помимо того, что здесь спросили.
...
Рейтинг: 0 / 0
JMM ликбез
    #39375603
vsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vsl
Гость
questioner,
questionerЕсли поменять местами 3 и 4 строка, то работать ничего не будет, а вот если 4 и 3, то всё будет огонь. Что за бред?
Стрелочки там не про перестановку строк 3 и 4, а вот про этот текст:
никакие операции располагающиеся выше границы happens-before в потоке X, не могут выполнится ниже границы happens-before в результате reordering, однако, операциям, находящимся ниже границы, разрешено выполнение до неё
Т.е. «x=1» не может быть выполнено после «unlock M», однако что-то, стоявшее после «unlock M», вполне может быть выполнено до unlock.
Присмотритесь, они же не стыкуются со строкой 4, а начинаются/заходят за неё.
...
Рейтинг: 0 / 0
JMM ликбез
    #39375650
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vslquestioner,
questionerЕсли поменять местами 3 и 4 строка, то работать ничего не будет, а вот если 4 и 3, то всё будет огонь. Что за бред?
Стрелочки там не про перестановку строк 3 и 4, а вот про этот текст:
никакие операции располагающиеся выше границы happens-before в потоке X, не могут выполнится ниже границы happens-before в результате reordering, однако, операциям, находящимся ниже границы, разрешено выполнение до неё
Т.е. «x=1» не может быть выполнено после «unlock M», однако что-то, стоявшее после «unlock M», вполне может быть выполнено до unlock.
Присмотритесь, они же не стыкуются со строкой 4, а начинаются/заходят за неё.

Да, спасибо, второй вопрос снят.

остаётся только первый.
...
Рейтинг: 0 / 0
JMM ликбез
    #39375662
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Happens-before это отношение между операциями, а не какой-то конкретный момент.
...
Рейтинг: 0 / 0
JMM ликбез
    #39375737
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner2. Вот Картинка вообще в ступор вгоняет.

Если поменять местами 3 и 4 строка, то работать ничего не будет, а вот если 4 и 3, то всё будет огонь. Что за бред?Очень важный момент: как освобождение/захват монитора, так и записать/чтение в volatile переменную связаны отношением happens-before, только если операции проводятся над одним и тем же экземпляром объекта . По картинке:

Если в Thread A значение X присвоение происходит между lock/unlock (т.е. синхронно), то в другом Thread B
значение переменной X, которая была изменена в Thread A, будет видна (предположим, что под "глазом"
находится оператор println X)
- благодаря тому, что обе операции чтения и записи в/из переменную в обоих
потоках - синхронизированы! (и println X выведет на экран 1)

А теперь, если вынесем присвоение (X=1) в Thread A за пределы синхро-блока (и переменная при этом не volatile),
Thread B не сможет увидеть новые изменения (т.е. X=1). Почему? В каждом ядре/процэ есть свой кэш, который
не синхронный с основной памятью. И если два потока выполняются на разных ядрах/процах значения
этих переменных могут быть разными. Соответственно, для получения актуальных данных из памяти (и записи тоже)
мы должны пользоваться синхро-блоками.
Вот! (:
...
Рейтинг: 0 / 0
JMM ликбез
    #39375738
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman Thread B не сможет ВЕРОЯТНЕЕ ВСЕГО НЕ увидит новые изменения
...
Рейтинг: 0 / 0
JMM ликбез
    #39375785
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner1. Что такое логический реордеринг?
(автор имеет ввиду, то что все операции просто завершились к моменту HB? или обязательно он увидит, что строка 3 выполнится раньше строки 4? хотя я тут вообще не понимаю. Ведь я так понимаю мысинкаемся только в момент HB. В общем я не понял, что хотел сказать автор)

Немного странный термин, этот "логический реордеринг".
По сути- находясь в другом потоке (например на другом процессоре с NUMA-памятью) мы можем увидеть изменение пееременных в другом порядке- просто потому, что в "наш" кэш они доедут по-другому.

questioner2. Вот Картинка вообще в ступор вгоняет.
Если поменять местами 3 и 4 строка, то работать ничего не будет, а вот если 4 и 3, то всё будет огонь. Что за бред?

Она не о том. Процессор может выполнить любую операцию, которая написана после "unlock M" в первом потоке ДО этого unlock. Даже если это x=2
Но не может выполнить ни одной операции, написанной до unlock после unlock.
Т.е., другими словами, любая операция может быть перемещена в минхронизированный блок, но вынесена из него быть не может. Такая чёрная дыра
...
Рейтинг: 0 / 0
JMM ликбез
    #39375787
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerи такая картинка там имеется:



Кстати, глядя на эту картинку надо помнить, что lock M в thread B может случится ДО lock M в thread A. Чисто случайно.
...
Рейтинг: 0 / 0
JMM ликбез
    #39375789
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominНемного странный термин, этот "логический реордеринг".
Нет, вроде, такого термина. ТС опять нашел какую-то второсортную интерпретацию и пытается её трактовать как первичный мануал.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JMM ликбез
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]