Jak to się dzieje, zanim się skończy
Wrozdział 17 JLS, wprowadza koncepcję: zdarza się - zanim będzie spójna.
Zestaw akcji A zdarza się - przed spójnym, jeżeli dla wszystkich odczytów rw A, gdzie W (r) jest akcją zapisu widzianą przez r, to nie jest tak, że hb (r, W (r)) lub tamto istnieje zapis w w A taki, że wv = rv i hb (W (r), w) i hb (w, r) ”
W moim rozumieniu jest to równoznaczne z następującymi słowami: ... jest tak, że ani ... ani ...
Moje pierwsze dwa pytania to:
czy moje zrozumienie jest właściwe?co oznacza „w.v = r.v”?Daje również przykład: 17.4.5-1
Thread 1 Thread 2
B = 1; A = 2;
r2 = A; r1 = B;
W pierwszej kolejności wykonania:
1: B = 1;
3: A = 2;
2: r2 = A; // sees initial write of 0
4: r1 = B; // sees initial write of 0
Już samo zamówienie mówi nam, że dwa wątki są wykonywane naprzemiennie, więc moje trzecie pytanie brzmi: co oznacza lewy numer?
W moim rozumieniu powodem r2 i r1 jest to, że początkowe zapisanie 0 jest zarówno A, jak i B nie jest polem zmiennym. Więc moim czwartym pytaniem jest: czy moje zrozumienie jest słuszne?
W drugiej kolejności wykonania:
1: r2 = A; // sees write of A = 2
3: r1 = B; // sees write of B = 1
2: B = 1;
4: A = 2;
Zgodnie z definicją zdarza się - przed konsekwencją, nie jest trudne do zrozumienia, że kolejność wykonywania się zdarza - przed spójnością (jeśli moje pierwsze zrozumienie jest poprawne). Więc moje piąte i szóste pytanie brzmi: czy istnieje taka sytuacja (czyta się, że pisma pojawiają się później) w prawdziwym świecie? Jeśli tak, czy możesz dać mi prawdziwy przykład?