Creo que en el algoritmo de Peterson para la exclusión mutua , si el primer proceso para ingresar a la sección crítica fuera a morir o cancelarse, el otro proceso se repetiría para siempre, esperando ingresar a la sección crítica.
En la imagen, si el proceso 1 se detiene, el resto de los procesos detrás del proceso 1 se ejecutarán hasta donde está el proceso 1 pero luego se repetirán.
¿Qué sucede si el proceso que llega a la sección crítica primero muere antes de abandonarlo?
Respuestas:
Esto depende de cómo se implementen los bloqueos. Si lo hace como en el artículo de Wikipedia, es decir, protegiendo la sección crítica con un booleano por proceso¹, ciertamente está en problemas. Si un proceso muere, nunca restablece su bandera, por lo que el otro proceso se repite para siempre.
En la práctica, puede proteger su código contra muchas formas de morir. Por ejemplo, tome esta implementación de estilo Java:
Esto asegurará que el indicador se restablezca pase lo que pase en la sección crítica, siempre y cuando el sistema esté manejando el error. En Java, eso es cierto incluso para desbordamientos de pila y montón. Entonces, a menos que el proceso desaparezca literalmente (
kill
², falla del procesador, desconexión de la red, ...) está a salvo. Tenga en cuenta que la mayoría del software no crítico falla en estos casos: ¿cómo puede manejar un error si no se está ejecutando? - por lo que tiene que ser aceptado en muchos casos. Puede manejar inconsistencias al reiniciar si es necesario.Si usa los bloqueos adecuados de nivel de idioma, el sistema de tiempo de ejecución puede manejar los propietarios de bloqueos que desaparecen, es decir, liberar los bloqueos con los propietarios muertos. Puede simular esto usted mismo dando a cada proceso un interruptor de hombre muerto que los demás puedan leer, o verificar directamente si el proceso de posesión del bloqueo aún está activo (si el sistema lo admite).
finalize
debería ejecutarse incluso enkill
, pero esto no está garantizado por la especificación.kill -9
es probablemente una sentencia de muerte para cualquier solución que requiera que el proceso de morir haga algo.fuente
Mire las suposiciones, específicamente que ningún proceso permanece en la sección crítica indefinidamente (eso ciertamente incluye simplemente irse). No creo que haya una manera de resolver ese problema general con ningún mecanismo de sincronización.
fuente