Sé que llego bastante tarde a esta fiesta, pero creo que es importante confundir el tema señalando que el significado de "modelos de memoria fuerte y débil" depende de si se habla de software o hardware.
Para hardware, débil o fuerte indica si hay soporte para la coherencia secuencial.
[SC significa que] ... el resultado de cualquier ejecución es el mismo que si las operaciones de todos los procesadores se ejecutaran en algún orden secuencial, y las operaciones de cada procesador individual aparecen en esta secuencia en el orden especificado por su programa. - Lamport, 1979
WTF, ¿eso tiene que ver con la memoria? Implica que las escrituras en variables de diferentes procesadores deben ser vistas en el mismo orden por todos los procesadores. En hardware con un modelo fuerte esto está garantizado. En hardware con un modelo débil, no lo es.
Las respuestas existentes interpretan la pregunta solo en términos de modelos de memoria de software. El hardware no es irrelevante para la programación. Esta misma pregunta menciona iOS, que normalmente se ejecuta en procesadores Arm7. Arm7 tiene un modelo de memoria débil. Para los programadores acostumbrados a procesadores con un modelo sólido, que somos todos porque x86 y x64 tienen un modelo sólido, esta es una trampa terrible. Usar un bool para señalar a otro hilo para salir funciona bien en un modelo fuerte. El mismo código en Arm no funciona en absoluto a menos que marque la bandera como volátil, e incluso entonces es errático.
Si bien es cierto que Arm8 + cambia esto por completo con soporte explícito para adquisición / lanzamiento, el software heredado no usa este soporte. El software heredado incluye los tres sistemas operativos del teléfono y todo lo que se ejecuta en ellos, así como compiladores y bibliotecas hasta que se actualizan.
Para un examen más extenso de este tema, le remito al inimitable Herb Sutter .