Происходит раньше, т.е. hb(x,y) отличается от hb(y,x)?

Приемлемые ответы после просмотра ответов, комментариев и jls-17.4.2

1) антисимметричное свойство имеет вид, указанный пользователем - user3707125

2) отношение hb между блокировками фактически находится между разблокировкой и блокировкой hb(ul, l), что не совпадает с hb (l, ul). Намекнул - шмосел
От JSL -

Разблокировка на мониторе происходит перед каждой последующей блокировкой на этом мониторе.

3) и разумное объяснение hb Джеймсом-большим


Актуальный вопрос был:

Модель памяти Java (JMM), описанная выше, происходит до взаимосвязи между несколькими действиями. Если "x" и "y" - это два действия с h(x,y) отношением между ними. JMM также заявляет, что реализации (компилятор, среда выполнения или оборудование) могут свободно переупорядочивать эти исполнения, если они достигают того же результата, что и выполнение "x", а затем "y" последовательно.

Так что я думаю, что

hb(x,y) != hb(y,x)  

Я прав? Или я что-то пропустил?

Обновить:
Также для действий, которые включают блокировки, как может быть установлена ​​связь hb. Поскольку событие блокировки разными потоками не может быть определено порядком программы, оно просто не является детерминированным и зависит от нескольких факторов, таких как инструкции, планировщик и т. Д.
Итак, между двумя блокирующими действиями - l1 и l2, как определить отношение hb (l1, l2) или hb (l2, l1). Кажется, оба приемлемы. В этом случае оба кажутся равными.
l1 и l2 являются блокирующими действиями для одного и того же объекта. l1 и l2 не являются замками

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

1 ответ

Решение

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

Если JLS говорит, что x происходит раньше, чем y, это означает, что реализации не разрешается делать какие-либо переупорядочения, которые могли бы создать видимость y, происходящую до x.

Другие вопросы по тегам