Набор действий A является согласованным до того, как произойдет, если для всех операций чтения r в A, где W(r) — действие записи, видимое r, это не тот случай, когда либо hb(r, W(r)) или существует запись w в A такая, что w.v = r.v и hb(W(r), w) и hb(w, r)"
В моем понимании это соответствует следующим словам:
..., это тот случай, когда ни ... ни ...
Поэтому мои первые два вопроса:
- правильно ли я понимаю?
- что означает "w.v = r.v" имеется в виду?
Код: Выделить всё
Thread 1 Thread 2
B = 1; A = 2;
r2 = A; r1 = B;
Код: Выделить всё
1: B = 1;
3: A = 2;
2: r2 = A; // sees initial write of 0
4: r1 = B; // sees initial write of 0
На мой взгляд, причина, по которой и r2, и r1 могут видеть начальную запись 0, заключается в том, что A и B не являются изменчивыми полями. Итак, мой четвертый вопрос: правильно ли я понимаю?
Во втором порядке выполнения:
Код: Выделить всё
1: r2 = A; // sees write of A = 2
3: r1 = B; // sees write of B = 1
2: B = 1;
4: A = 2;
Итак, мои пятый и шестой вопросы: существует ли такая ситуация (чтение видит запись, которая происходит позже) в реальном мире? Если да, не могли бы вы привести мне реальный пример?
Подробнее здесь: https://stackoverflow.com/questions/119 ... consistent
Мобильная версия