Запутался в нотации, может кто-нибудь просто объяснить что означает (как читать) эта нотация в спецификации:
hbi|Ci = hb|Ci
soi|Ci = so|Ci
Vi|Ci = V|Ci
Wi|Ci-1 = W|Ci-1
http://docs.oracle.com/javase/specs/jls/se8/html/jls-17.html#jls-17.4.8
от сюда:
Given these sets of actions C0, ... and executions E1, ... , every action in Ci must be one of the actions in Ei. All actions in Ci must share the same relative happens-before order and synchronization order in both Ei and E. Formally:
Ci is a subset of Ai
hbi|Ci = hb|Ci
soi|Ci = so|Ci
The values written by the writes in Ci must be the same in both Ei and E. Only the reads in Ci-1 need to see the same writes in Ei as in E. Formally:
Vi|Ci = V|Ci
Wi|Ci-1 = W|Ci-1
Здравствуйте, WinnieJayClay, Вы писали:
WJC>Запутался в нотации, может кто-нибудь просто объяснить что означает ...
В общих словах это означает:
1) Если вы прочитали какое-то значение, то оно было кем-то записано ранее (гарантия отсутствия out-of-thin-air значений).
2) Если вы что-то прочитали, и это что-то было записано через всякие volatile/synchronized, то у вас будут и гарантии видимости предыдущих изменений согласно acquire/release семантике.
Спецификация JMM не предназначена для чтения широким кругом лиц. Ее цель — максимально полно и точно описать, что делает JMM с формальной точки зрения. К сожалению, как нельзя что-то сделать быстро, качественно и дешево одновременно, точно так же нельзя описать что-либо полно, точно и понятно одновременно. Поэтому я вам рекомендую бросить это бесперспективное занятие, и делать упор на практику и чтение объяснений JMM человеческим языком в различных статьях и блогах.
Я не постесняюсь сказать, что хорошо понимаю JMM. При этом я раз 20 открывал эту спецификацию, пытаясь что-то понять, и четко уловил, ну максимум несколько не самых сложных абзацев

Это теоретическое обоснование JMM, которое нужно только тем, кто ее разрабатывает и обосновывает с академической точки зрения. На практике от нее толка нет.