Я знаю, що я досить спізнююся з цією партією, але я вважаю, що важливо плутати проблему, вказавши, що значення "сильних і слабких моделей пам'яті" залежить від того, говорити ви про програмне забезпечення або обладнання.
Для апаратних засобів слабкий або сильний вказує, чи є підтримка послідовної послідовності.
[SC означає, що] ... результат будь-якого виконання такий же, як якщо б операції всіх процесорів були виконані в якомусь послідовному порядку, а операції кожного окремого процесора з'являються в цій послідовності в порядку, визначеному його програмою. - Лампорт, 1979
WTF це стосується пам'яті? Це означає, що записи на змінні різними процесорами повинні бачитися в одному порядку в усіх процесорах. У техніці із сильною моделлю це гарантується. Що стосується апаратури зі слабкою моделлю, це не так.
Існуючі відповіді тлумачать питання лише з точки зору моделей програмної пам'яті. Обладнання не має значення для програмування. У цьому самому питанні згадується iOS, який, як правило, працює на процесорах Arm7. Arm7 має слабку модель пам'яті. Для програмістів, звикших до процесорів із сильною моделлю - що ми всі, тому що x86 та x64 мають сильну модель - це жахлива пастка. Використання bool для сигналізації іншої нитки для виходу працює чудово у сильній моделі. Один і той же код на Arm взагалі не працює, якщо ви не позначите прапор непостійним, і навіть тоді він нестабільний.
Хоча це правда, що Arm8 + це суттєво змінює з явною підтримкою придбання / випуску, застаріле програмне забезпечення не підтримує цю підтримку. Спадкове програмне забезпечення включає всі три ОС телефону та все, що працює на них, а також компілятори та бібліотеки до їх оновлення.
Для розширеного вивчення цієї теми я посилаю вас на неповторну траву Саттер .