Cómo entender que sucede antes de ser consistente
Encapitulo 17 de JLS, introduce un concepto: pasa-antes es consistente.
Un conjunto de acciones A sucede antes de que sea consistente si para todas las lecturas r en A, donde W (r) es la acción de escritura vista por r, no es el caso que hb (r, W (r)) o que haya existe una escritura w en A tal que wv = rv y hb (W (r), w) y hb (w, r) "
A mi entender, es igual a las siguientes palabras: ..., es el caso de que ni ... ni ...
Así que mis dos primeras preguntas son:
es mi entendimiento correcto?¿Qué significa "w.v = r.v"?También da un ejemplo: 17.4.5-1
Thread 1 Thread 2
B = 1; A = 2;
r2 = A; r1 = B;
En primer orden de ejecución:
1: B = 1;
3: A = 2;
2: r2 = A; // sees initial write of 0
4: r1 = B; // sees initial write of 0
La orden en sí ya nos ha dicho que dos subprocesos se ejecutan alternativamente, por lo que mi tercera pregunta es: ¿qué significa el número de la izquierda?
En mi entendimiento, la razón de que tanto r2 como r1 puedan ver que la escritura inicial de 0 es que A y B no son campos volátiles. Así que mi cuarta pregunta es: ¿si mi comprensión es correcta?
En segundo orden de ejecución:
1: r2 = A; // sees write of A = 2
3: r1 = B; // sees write of B = 1
2: B = 1;
4: A = 2;
De acuerdo con la definición de coherencia de suceso-antes, no es difícil entender que este orden de ejecución es suceso -debien sea consistente (si mi primera comprensión es correcta). Entonces, mi quinta y sexta pregunta son: ¿existe esta situación (lee, lee las escrituras que ocurren más adelante) en el mundo real? Si lo hace, ¿podría darme un ejemplo real?