Estoy tratando de mejorar mi comprensión de las barreras de memoria. Supongamos que tenemos un modelo de memoria débil y adaptamos Dekker's algorithm. ¿Es posible hacer que funcione correctamente bajo el modelo de memoria débil al agregar barreras de memoria?Barreras de memoria frente a operaciones interbloqueadas
creo que la respuesta es un no sorprendente. El motivo (si estoy en lo cierto) es que, aunque se puede utilizar una barrera de memoria para garantizar que una lectura no se mueva más allá de otra, no puede garantizar que una lectura no vea datos obsoletos (como la de un caché). Por lo tanto, podría ver algún momento en el pasado cuando la sección crítica se desbloqueó (por el caché de la CPU) pero en el momento actual otros procesadores podrían verlo como bloqueado. Si mi comprensión es correcta, se deben usar operaciones interconectadas, como las llamadas comúnmente prueba y ajuste o comparar y cambiar, para garantizar la concordancia sincronizada de un valor en una ubicación de memoria entre múltiples procesadores.
Por lo tanto, podemos esperar con razón que ningún débil sistema de modelo de memoria proporcionaría únicas barreras de memoria? El sistema debe proporcionar operaciones como test-and-set o compare-and-swap para ser útil.
Me doy cuenta de que los procesadores populares, incluido x86, proporcionan modelos de memoria mucho más fuertes que un modelo de memoria débil. Por favor, enfoca la discusión en modelos de memoria débil.
(Si el algoritmo de Dekker es una mala elección, elegir otro algoritmo de exclusión mutua donde las barreras de memoria pueden lograr con éxito la sincronización correcta, si es posible.)
AFAICT, para Dekker's, no es suficiente saber que la bandera estuvo clara en algún momento del pasado, sino que ahora es seguro ingresar a la sección crítica. Parece que necesito el valor actualizado, y no veo cómo lo logras con barreras de memoria (como dices justo en tu primera oración). –
Solo necesitas una barrera más fuerte que la que acabo de mostrar, una "valla completa". Actualizaré mi respuesta para mostrarle a Dekker las barreras más tarde. –