Wiem, że jestem raczej spóźniony na tę imprezę, ale myślę, że ważne jest, aby zmylić sprawę, wskazując, że znaczenie „mocnych i słabych modeli pamięci” zależy od tego, czy mówisz o oprogramowaniu, czy sprzęcie.
W przypadku sprzętu, słaby lub silny wskazuje, czy istnieje obsługa spójności sekwencyjnej.
[SC oznacza, że] ... wynik każdego wykonania jest taki sam, jakby operacje wszystkich procesorów były wykonywane w jakiejś kolejności, a operacje każdego pojedynczego procesora pojawiają się w tej kolejności w kolejności określonej przez jego program. - Lamport, 1979
WTF czy to ma coś wspólnego z pamięcią? Oznacza to, że zapisy do zmiennych przez różne procesory muszą być widziane w tej samej kolejności przez wszystkie procesory. W sprzęcie z mocnym modelem jest to gwarantowane. Na sprzęcie ze słabym modelem tak nie jest.
Istniejące odpowiedzi interpretują pytanie tylko w kategoriach modeli pamięci oprogramowania. Sprzęt nie jest bez znaczenia dla programowania. To samo pytanie dotyczy iOS, który zwykle działa na procesorach Arm7. Arm7 ma słaby model pamięci. Dla programistów przyzwyczajonych do procesorów z mocnym modelem - którym jest każdy z nas, bo x86 i x64 mają mocny model - to straszna pułapka. Używanie bool do sygnalizowania wyjścia innemu wątkowi działa dobrze w silnym modelu. Ten sam kod na Arm nie działa w ogóle, chyba że oznaczysz flagę jako lotną, a nawet wtedy jest błędny.
Chociaż prawdą jest, że Arm8 + całkowicie to zmienia z wyraźnym wsparciem dla nabycia / wydania, starsze oprogramowanie nie korzysta z tej obsługi. Starsze oprogramowanie obejmuje wszystkie trzy systemy operacyjne telefonu i wszystko, co na nich działa, a także kompilatory i biblioteki, dopóki nie zostaną zaktualizowane.
W celu dokładniejszego zbadania tego tematu odsyłam do niepowtarzalnego Herb Suttera .