De acuerdo con an article en IBM.com, "una condición de carrera es una situación en la que dos o más hilos o procesos están leyendo o escribiendo algunos datos compartidos, y el resultado final depende del momento en que se programan los hilos. puede conducir a resultados impredecibles y errores sutiles del programa ". . Aunque el artículo se refiere a Java, en general me han enseñado la misma definición.¿Qué pasa con la condición de carrera en lectura multiproceso?
Por lo que sé, la operación simple de lectura desde la RAM se compone de establecer los estados de las líneas de entrada específicas (dirección, lectura, etc.) y leer los estados de las líneas de salida. Esta es una operación que obviamente no puede ser ejecutada simultáneamente por dos dispositivos y tiene que ser serializada.
Supongamos ahora que tenemos una situación en la que un par de hilos acceden a un objeto en la memoria. En teoría, este acceso debe ser serializado para evitar condiciones de carrera. Pero, p. el algoritmo de lectores/escritores asume que un número arbitrario de lectores puede usar la memoria compartida al mismo tiempo.
Entonces, la pregunta es: ¿hay que implementar un bloqueo exclusivo para lectura cuando se usa el multihilo (en WinAPI, por ejemplo)? Si no, ¿por qué? ¿Dónde se implementa este control - SO, hardware?
Saludos, Kuba
hah, told'ya;] –