Como entender acontece antes de consistente
EmCapítulo 17 da JLS, introduz um conceito: acontece antes consistente.
Um conjunto de ações A ocorre - antes consistente se para todas as leituras r em A, onde W (r) é a ação de escrita vista por r, não é o caso de que hb (r, W (r)) ou que existe uma escrita w em A tal que wv = rv e hb (W (r), w) e hb (w, r) "
No meu entendimento, é igual a seguir as palavras: ..., é o caso que nem ... nem ...
Então minhas duas primeiras perguntas são:
meu entendimento é certo?o que significa "w.v = r.v"?Também dá um Exemplo: 17.4.5-1
Thread 1 Thread 2
B = 1; A = 2;
r2 = A; r1 = B;
Na primeira ordem de execução:
1: B = 1;
3: A = 2;
2: r2 = A; // sees initial write of 0
4: r1 = B; // sees initial write of 0
A ordem em si já nos disse que dois threads são executados alternadamente, então minha terceira pergunta é: o que o número esquerdo significa?
No meu entendimento, a razão de ambos r2 e r1 pode ver que a gravação inicial de 0 é A e B não são campos voláteis. Então, minha quarta pergunta é: se meu entendimento está correto?
Na segunda ordem de execução:
1: r2 = A; // sees write of A = 2
3: r1 = B; // sees write of B = 1
2: B = 1;
4: A = 2;
De acordo com a definição de acontece antes da consistência, não é difícil entender que essa ordem de execução acontece antes de ser consistente (se meu primeiro entendimento estiver correto). Então, minhas quintas e sextas questões são: existe esta situação (lê, veja as gravações que ocorrem depois) no mundo real? Se isso acontecer, você poderia me dar um exemplo real?