Witam
Mam problem ze zrozumieniem modelów pamięci. Tzn. rozumiem spójność sekwencyjną (sequential consistency). W 1 wątku robimy zapis do zmiennej atomowej, w drugim czytamy zmienną. Spójność sekwencyjna oznacza tutaj, że:

  • w tym samym czasie dostęp do pamięci będzie z jednego wątku, czyli jak wątek 1-szy robi zapis to odczyt w drugim wątku będzie dopiero po zakończeniu zapisu i wice wersa na odwrót
  • jeżeli 3-ci wątek widzi kolejność zapis w pierwszym wątku, odczyt w drugim, to każdy następny wątek zoabczy taką samą kolejność
  • jeżeli mamy milion procków i robią one zapis/odczyt na zmiennej to operacje dostępu do zmiennej atomowej są nie asynchroniczne, czyli jakby wyrzucić wszystkie inne operacje wykonywane przez te milion procków a zostawić tylko operacje na zmiennej atomowej to tak naprawdę nie ptorzebujemy miliona procków tylko wystarczyłby 1 i w takim samym czasie by te wszystkie operacje na zmiennej atomowej przebiegły.

No i tyle rozumiem. A jest jeszcze relaxed, acquire, release memory order. Nic z tego nie rozumiem a przeczytałem chyba z 10 artykułów na ten temat z różnym zrozumieniem albo i bez, dla mnie to czarna magia to raz a dwa że tego się nie stosuje ale niestety wpaniali panowie na rekrutacjach wypytują o to i czy mógłby ktoś mi wytłumaczyć przynajmniej model relaxed, release i acquire o co tu chodzi, czy to da się w ogóle wytłumaczyć, czym to się różni od spójności sekwencyjnej?

Jeszcze w sumie model relaxed wydaje się zrozumiały - różniłby się tym od sequential memory order że jednocześnie 1 wątek może zapisywać a drugi odczytywać zmienną. Nie mogą 2 wątki jednocześnie odczytywać. Nie mogą również jednocześnie zapisywać.
A reszta to coś chyba pośredniego.