Sí, puede implementar la exclusión mutua solo con la carga de memoria y las instrucciones de almacenamiento. Existe una larga tradición de idear soluciones sucesivamente más simples para este problema.
La primera versión que conozco, llamada "solución de Dekker", se introdujo en Dijkstra, Edsger W .; "Procesos secuenciales cooperantes", en F. Genuys, ed., Lenguajes de programación: Instituto de Estudios Avanzados de la OTAN , págs. 43-112, Academic Press, 1968 . Ha habido docenas de soluciones desde entonces. Discutiré solo algunos de los más notables.
Lamport, Leslie; "Una nueva solución del problema de programación concurrente de Dijkstra", Comm ACM 17 (8): 453-455, 1974 presenta el "algoritmo de panadería" (porque se basa en la analogía de las personas que toman números para determinar el orden en el que estarán servido en la panadería). Una de las características particularmente notables de este algoritmo es que demuestra que no se requiere ninguna atomicidad de hardware para resolver el problema de exclusión mutua. Las lecturas que se superponen en la misma ubicación pueden devolver cualquier valor y el algoritmo aún funciona. Lamport discute esto un poco en la descripción del artículo en su página de inicio .
La solución de Peterson, Peterson, GL; "Mitos sobre el problema de exclusión mutua", Inf. Proc. Letón. , 12 (3): 115-116, 1981 , es uno que está específicamente diseñado para ser fácil de entender y razonar. Finalmente, uno de mis favoritos en particular es Lamport, Leslie; "Un algoritmo rápido de exclusión mutua", ACM Trans. Comp. Sys. , 5 (1): 1-11, 1987. En este documento, Lamport estaba tratando de optimizar una solución al problema de exclusión mutua en el caso (común) de que hay poca controversia para la sección crítica. Garantiza la exclusión mutua y la libertad de punto muerto, pero no la justicia. Es (creo) el primer algoritmo de exclusión mutua que usa solo lecturas y escrituras normales que pueden sincronizar N procesadores en O (1) cuando no hay contención. (Cuando hay contención, recurre a una prueba O (N)). Da una demostración informal de que lo mejor que puede hacer en el caso libre de contención es siete accesos a la memoria. (Dekker y Peterson lo hacen con 4, pero solo pueden manejar 2 procesadores, cuando extiendes sus algoritmos a N tienen que agregar accesos O (N) adicionales).
Aparentemente, las personas que trabajan en el problema de resolver la exclusión mutua utilizando solo lecturas y escrituras de memoria se sienten frustradas por la falta de comprensión de otras personas sobre el problema y sus soluciones. Esto se demuestra en parte por el título del artículo de Peterson ("Mitos sobre el problema de exclusión mutua") y en parte por una breve nota que Lamport publicó en 1991: Lamport, Leslie; "El problema de exclusión mutua se ha resuelto", Comm ACM 34 (1): 110, 1991 , que Lamport describe de forma algo amarga en su página de inicio .
Entonces, para responder a su segunda pregunta: No. Hay muchas más de tres categorías de soluciones de nivel de hardware para el problema de la sección crítica (usar solo cargas y tiendas es una, otras implican instrucciones de comparar e intercambiar, carga-vinculada / condicional de tienda instrucciones (usando el protocolo de coherencia de caché para probar la atomicidad) y buscar y agregar instrucciones.) En otro sentido, en realidad solo hay una categoría de soluciones: aquellas que implican obtener un montón de procesos asincrónicos para acordar un orden global de eventos .
(Tenga en cuenta que esta respuesta es una edición (extensa) de una respuesta anterior que di para una pregunta muy diferente ).