powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / syncronized vs volatile с точки зрения visibility
25 сообщений из 135, страница 2 из 6
syncronized vs volatile с точки зрения visibility
    #39394971
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
*leap
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39394978
vimba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionervimbaпропущено...
Забудте о кешах и о времени, JMM специально Вам дана, чтобы Вы об этих двух понятиях программируя, многопоточный код на java никогда не думали.
Где вам почудилось время то я не могу понять в первом посте?

Я не правильно интерпритировал сразу , Вы так изъясняетесь что без дополнительных комментариев непонятно что значит сразу, это можно понять и как момент времени, что я собственно и сделал.

questionerвремя задаёт ордеринг?

И здесь то же самое, у Вас потрясающая способность писать двусмысленные фразы, я лично не понимаю даже из контекста кто-кого задаёт.
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39394981
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vimbaquestionerпропущено...

Где вам почудилось время то я не могу понять в первом посте?

Я не правильно интерпритировал сразу , Вы так изъясняетесь что без дополнительных комментариев непонятно что значит сразу, это можно понять и как момент времени, что я собственно и сделал.

questionerвремя задаёт ордеринг?

И здесь то же самое, у Вас потрясающая способность писать двусмысленные фразы, я лично не понимаю даже из контекста кто-кого задаёт.

время - подлежащее
задаёт - сказуемое
ордеринг - дополнение
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39394986
vimba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

Ну и какой порядок задает время? Happens-befor order или Synchronized-with order, или оба сразу?
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39394989
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vimbaquestioner,

Ну и какой порядок задает время? Happens-befor order или Synchronized-with order, или оба сразу?

время задаёт обычный человеческий порядок.

happens-before задаёт правила порядка выполнения кода и видимости. Порядок это значит до или после, то бишь одно раньше/после другого. Но это пограничное событие, которое определяет ребро, оно всё равно в какой-то момент времени происходит. То есть время это аттрибут нашего события. И в обычном мире событие, которое происходит после имеет время большее, нежели у этого события, задающее ребро.


а вот кстати про Synchronized-with order не слышал. Объясните недвусмысленно?
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395038
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerну много разных happens-before бывает. Что конкретно хотите этим показать?
я разве где-то писал, что этого не может быть? я всего лишь написал, что есть гарантия, что если мы вышли из блока syncronized, то потом при входе в секцию по тому же монитору мы гарантированно увидим изменения в блоке из которого вышли.

Комментарий из разряда "поумничать ради поумничать"
Скорее вопрос. Вы так еще по прошлому не поняли, что означает happens before.
Это всего лишь гарантированная точка синхронизации, говорящая, что если видно, что было на момент точки видно и то, что было до того.
На самом деле этим отношением показывают взаимодействие в памяти.
На самом деле в момент доступа к volatile, началу блока синхронизации, его окончанию, захвату блокировки и т.п. устанавливается барьер для out of order execution и происходит сброс измененного кеша проца в память с инвалидацией соответствующих страниц на других процах. Тем самым появляется гарантия видимости.
До этого момента нет гарантии, что изменения будут видны, как впрочем и нет гарантий что они не будут видны, полностью или частично.
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395039
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vimbaЗабудте о кешах и о времени, JMM специально Вам дана, чтобы Вы об этих двух понятиях программируя, многопоточный код на java никогда не думали.
Кому как удобнее понять. Кому-то "до/после", кому-то "барьер в памяти", кому-то "версия страницы".
Главное, чтоб стало понятно, что не поток пройдя сквозь монитор видит актуальное состояние, а наоборот оповещает остальных о том, что он сделал.
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395041
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerвремя задаёт ордеринг? да,задаёт(ну кроме lip second). По-моему, очевидно.
Очевидное очень часто ложно. В данном случае определенно.
Порядок задает исходный код программы. А до или после решает jvm по ходу пьесы.
Другими словами
Код: java
1.
2.
3.
4.
int i=0;
i++;
i+=2;
System.out.println(i);


JMM разрешает сделать jvm и сначала инкремент, затем увеличение на два.И сначала увеличение на два, а затем инкремент. И даже сразу присвоение тройки.Но требует, чтобы к моменту работы с потоком эти операции были сделаны полностью.
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395047
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей АрсеньевСкорее вопрос. Вы так еще по прошлому не поняли, что означает happens before.
почему не понял?
Сергей АрсеньевЭто всего лишь гарантированная точка синхронизации, говорящая, что если видно, что было на момент точки видно и то, что было до того.
Хитро закрученная фраза, несколько раз перечитал с попыткой расставить паузы по разному, не помогло.


Помогите мне найти, плиз, гарантии на вход в критическую секцию. Пример приветствуется.
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395048
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньевquestionerвремя задаёт ордеринг? да,задаёт(ну кроме lip second). По-моему, очевидно.
Очевидное очень часто ложно. В данном случае определенно.
Порядок задает исходный код программы. А до или после решает jvm по ходу пьесы.
Другими словами
Код: java
1.
2.
3.
4.
int i=0;
i++;
i+=2;
System.out.println(i);


JMM разрешает сделать jvm и сначала инкремент, затем увеличение на два.И сначала увеличение на два, а затем инкремент. И даже сразу присвоение тройки.Но требует, чтобы к моменту работы с потоком эти операции были сделаны полностью.

Вы всё в кучу смешали. я не говорю, что всё, что очевидно это правда. В вашем примере, да, реордеринг может случиться и другой поток может увидеть нечто вгоняющее в ступор, но это особенность JMM. Я лишь говорю, что время это АТТРИБУТ события(1). любое, любое другое событие после события(1) будет иметь время, большее, чем у события(2), а меньшее, меньше, чем у события(1).
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395062
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здорово расписано про все: http://en.cppreference.com/w/cpp/atomic/memory_order на более низком уровне, чем happens-before.
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395090
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczsynchronized через ch пишеться, если что."пишется" без ь пишется, если что.
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395141
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerа что значит дойдёт? что вы под этим подразумеваете?

Что угодно. JMM это список гарантий. Не более. Все попытки придумать "как это делано"- это пустая трата времени (более того, это запутывает). Волатильность гарантирует только две вещи- атомарность и то, что чтение видит всё то, что было сделано до (в том же потоке) той записи, которую это чтение видит.
Никаких гарантий, какую запись увидит чтение нет. Вообще никаких. Сброс кэшей и т.п.- это только чьи-то фантазии. Если в JDK 1.8.101 сделано так, то в 1.8.111 может всё быть уже по-другому. Если что-то выпоняется на intel core i7, то на ARM может быть всё другое. А арендовав машину в облаке можно получить что угодно.

questionerкогда второй поток обратится? да в какой бы момент после записи волатильной переменной не обратился, в любой момент и увидит новой значение.

Откуда, ну откуда Вы это взяли? Никто и нигде такого не обещал.

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

Такое обязательство (наличие момента времени для каждой операции) снизило бы производительность многоядерной системы на несколько порядков. Поэтому "у момента записи есть свойство - время" - неправда. Чем быстрее Вы это поймёте- тем быстрее поймёте JMM и вообще разработку в многопроцессорной среде.

Вся JMM построена на понятии частичного порядка. По сути "если мы видим вот эту запись, то мы видим и вот эти операции точно, а вот эти- может быть". Всё. Забудьте (до понимания главного) про кэши, инвалидацию, реордеригн, спекулятивное исполнение (да, оно тоже может подгадить тому, кто пытается строить код на "понимании работы процессора").
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395152
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> чтение видит всё то, что было сделано до (в том же потоке) той записи, которую это чтение видит.
Кто на ком сидел?
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395159
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> оно тоже может подгадить тому, кто пытается строить код на "понимании работы процессора"
Это большая беда сейчас. Молодёжь не хочет читать формальные спецификации, а полагается на своё "понимание работы процессора".
Говорят, что полезно начинать учиться прогать с ассемблера. Сколько я наблюдал таких начавших — все они были подтверждением того, что НЕ полезно. Пишут код исходя из своего "понимания" работы. И когда видят, что компилятор компилирует во что-то, что не соответствует этому "пониманию", начинают бегать везде и вопить о багах в компиляторах.
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395160
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominВсё. Забудьте (до понимания главного) про кэши, инвалидацию, реордеригн, спекулятивное исполнение (да, оно тоже может подгадить тому, кто пытается строить код на "понимании работы процессора").
То что оно не пригодится на практике, вообще никак не значит что про это нужно забывать. Полезно понимать природу вещей, а не абстрактные аксиомы. Для понимания нужно знать как всё работает. JMM нужна совершенно для другого - она даёт доказательных механизм корректности работы кода.
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395191
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Tominquestionerа что значит дойдёт? что вы под этим подразумеваете?

Что угодно. JMM это список гарантий. Не более. Все попытки придумать "как это делано"- это пустая трата времени (более того, это запутывает). Волатильность гарантирует только две вещи- атомарность и то, что чтение видит всё то, что было сделано до (в том же потоке) той записи, которую это чтение видит.
Никаких гарантий, какую запись увидит чтение нет. Вообще никаких. Сброс кэшей и т.п.- это только чьи-то фантазии. Если в JDK 1.8.101 сделано так, то в 1.8.111 может всё быть уже по-другому. Если что-то выпоняется на intel core i7, то на ARM может быть всё другое. А арендовав машину в облаке можно получить что угодно.

Нет уж давайте конкретно. что значит "дойдёт"?
Про атомарность это Вы про long и double ?
Alexey Tominчтение видит всё то, что было сделано до (в том же потоке) той записи, которую это чтение видит.
Для видимости внутри одного потока у нас и так есть гарантии(happens before) по JMM. Никакой volatile тут не при делах.

Alexey Tominquestionerкогда второй поток обратится? да в какой бы момент после записи волатильной переменной не обратился, в любой момент и увидит новой значение.

Откуда, ну откуда Вы это взяли? Никто и нигде такого не обещал.
А как же ж нет то? давайте посмотрим на любой код, который работает с volatile, а без него не гарантированно.


Alexey Tominquestionerопять же у момента записи есть свойство - время, соответственно, транзитивно верно сказать, что после времени записи волатильной переменной любые потоки увидят это обновление.

Такое обязательство (наличие момента времени для каждой операции) снизило бы производительность многоядерной системы на несколько порядков. Поэтому "у момента записи есть свойство - время" - неправда. Чем быстрее Вы это поймёте- тем быстрее поймёте JMM и вообще разработку в многопроцессорной среде.

Вся JMM построена на понятии частичного порядка. По сути "если мы видим вот эту запись, то мы видим и вот эти операции точно, а вот эти- может быть". Всё. Забудьте (до понимания главного) про кэши, инвалидацию, реордеригн, спекулятивное исполнение (да, оно тоже может подгадить тому, кто пытается строить код на "понимании работы процессора").

Это похоже на side effect volatile. А как по вашему мы должны определять увидели мы изменение или нет? в коде может как-то?
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395195
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczCommon LispBlazkowicz, подскажи))
На юг.Зачем?))
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395196
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczAlexey TominВсё. Забудьте (до понимания главного) про кэши, инвалидацию, реордеригн, спекулятивное исполнение (да, оно тоже может подгадить тому, кто пытается строить код на "понимании работы процессора").
То что оно не пригодится на практике, вообще никак не значит что про это нужно забывать. Полезно понимать природу вещей, а не абстрактные аксиомы. Для понимания нужно знать как всё работает. JMM нужна совершенно для другого - она даёт доказательных механизм корректности работы кода.

Расскажите пожалуйста про то, что случается при входе в критическую секцию с кешами. Я такого не встречал пока что.
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395215
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAlexey TominВсё. Забудьте (до понимания главного) про кэши, инвалидацию, реордеригн, спекулятивное исполнение (да, оно тоже может подгадить тому, кто пытается строить код на "понимании работы процессора").
То что оно не пригодится на практике, вообще никак не значит что про это нужно забывать. Полезно понимать природу вещей, а не абстрактные аксиомы. Для понимания нужно знать как всё работает. JMM нужна совершенно для другого - она даёт доказательных механизм корректности работы кода.

Знать это надо, не надо это пытаться применять в данном случае :)
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395218
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerBlazkowiczпропущено...

То что оно не пригодится на практике, вообще никак не значит что про это нужно забывать. Полезно понимать природу вещей, а не абстрактные аксиомы. Для понимания нужно знать как всё работает. JMM нужна совершенно для другого - она даёт доказательных механизм корректности работы кода.

Расскажите пожалуйста про то, что случается при входе в критическую секцию с кешами. Я такого не встречал пока что.

Зависит от процессора. Это главное, что надо знать.
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395230
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerНет уж давайте конкретно. что значит "дойдёт"?

Значит, что второй поток увидит значение, заданное в другом потоке.
Через сколько тактов процессора второй поток увидит изменения, сделанные первым- точно неизвестно.

questionerПро атомарность это Вы про long и double ?

Да, хотя для intel это не актуально, но может стрельнуть на каком-нибудь ARM.

questionerAlexey Tominчтение видит всё то, что было сделано до (в том же потоке) той записи, которую это чтение видит.
Для видимости внутри одного потока у нас и так есть гарантии(happens before) по JMM. Никакой volatile тут не при делах.

Да, я неудачно выразился.
Если в потоке 1 поменяли значения волательной переменной и в потоке 2 мы это увидели, то мы увидим (во втором потоке) так же все изменения, сделанные в 1м потоке до (внутри одного потока допустимо говорить о порядке) изменения волатильной переменной.
Но надо понимать, что можем увидеть и ЕЩЁ какие-то изменения ;)

questionerAlexey TominОткуда, ну откуда Вы это взяли? Никто и нигде такого не обещал.
А как же ж нет то? давайте посмотрим на любой код, который работает с volatile, а без него не гарантированно.

Не путайте "обычно так" и "гарантировано". В этом и проблема, что код с ошибкой работает в 99.9% случаев. Т.е. у заказчика бага будет, а воспроизвести- фиг.

questionerЭто похоже на side effect volatile. А как по вашему мы должны определять увидели мы изменение или нет? в коде может как-то?

А волатильные переменные и служат флагами.
Мы просто ждём, пока увидим изменения.
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395273
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Tominquestionerпропущено...


Расскажите пожалуйста про то, что случается при входе в критическую секцию с кешами. Я такого не встречал пока что.

Зависит от процессора. Это главное, что надо знать.

я спросил, что случится, получил ответ, что главное, это надо знать. Что знать то надо?
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395283
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey TominquestionerНет уж давайте конкретно. что значит "дойдёт"?

Значит, что второй поток увидит значение, заданное в другом потоке.
Через сколько тактов процессора второй поток увидит изменения, сделанные первым- точно неизвестно.

questionerПро атомарность это Вы про long и double ?

Да, хотя для intel это не актуально, но может стрельнуть на каком-нибудь ARM.

questionerпропущено...

Для видимости внутри одного потока у нас и так есть гарантии(happens before) по JMM. Никакой volatile тут не при делах.

Да, я неудачно выразился.
Если в потоке 1 поменяли значения волательной переменной и в потоке 2 мы это увидели, то мы увидим (во втором потоке) так же все изменения, сделанные в 1м потоке до (внутри одного потока допустимо говорить о порядке) изменения волатильной переменной.
Но надо понимать, что можем увидеть и ЕЩЁ какие-то изменения ;)

questionerпропущено...

А как же ж нет то? давайте посмотрим на любой код, который работает с volatile, а без него не гарантированно.

Не путайте "обычно так" и "гарантировано". В этом и проблема, что код с ошибкой работает в 99.9% случаев. Т.е. у заказчика бага будет, а воспроизвести- фиг.

questionerЭто похоже на side effect volatile. А как по вашему мы должны определять увидели мы изменение или нет? в коде может как-то?

А волатильные переменные и служат флагами.
Мы просто ждём, пока увидим изменения.

так мы можем долго разбираться, давайте Вы приведете пример с volatile, где мы увидим, что изменение не гарантировано и обсудим действительно ли оно не гарантировано. И как этот флаг будет использоваться.

Зачем мне, разработчику на java, задумываться о тактах процессора? сброс кешей хоть упрощает понимание происходящего, а такты то мне зачем?
...
Рейтинг: 0 / 0
syncronized vs volatile с точки зрения visibility
    #39395292
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну и значит ли Ваша фраза про флаги, что есть смысл только в boolean volatile ?
В других случаях я не очень понимаю как мы будем понимать чего нам ждать
...
Рейтинг: 0 / 0
25 сообщений из 135, страница 2 из 6
Форумы / Java [игнор отключен] [закрыт для гостей] / syncronized vs volatile с точки зрения visibility
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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