Desafiando las leyes de la computación (II)

¡Hola a todos de nuevo! Después de casi seis meses sin escribir, vuelvo al blog con una nueva meta: refutar el problema de la parada de Alan Turing.

El problema de la parada enuncia, a grandes rasgos, que es imposible escribir un programa que detecte que otro se bloquearía en algún caso. Nosotros lo hemos complicado aún más: ¿Se puede hacer un programa que detecte que él mismo se ha bloqueado?

¡Y hemos encontrado la forma! La solución es muy sencilla: construimos una aplicación con dos hebras que se envían señales entre sí. Si una de ellas se bloquea, la otra se daría cuenta al enviar señales pero no recibir respuestas.

Presentamos un programa que se divide en dos hebras: una de ellas dibuja figuras en memoria, y la otra representa en pantalla lo que la primera ha escrito. La hebra principal envía cada segundo una señal a la auxiliar, y ésta devuelve una respuesta. Si tarda más de medio segundo en hacerlo, la primera mostrará una alerta.

En el programa encontramos un botón que permite hacer que la hebra auxiliar (la que crea los dibujos) entre en un bucle de Manolo adaptado a este propósito, con lo que le será imposible devolver respuestas. Entonces aparecerá un mensaje diciendo que el programa se ha bloqueado.

Tan descomunal frikada podéis descargar aquí, junto a su código fuente:


Claro está que, en realidad, este efecto no perjudica para nada al problema de la parada, que está orientado a máquinas de Turing y se refiere a que no se puede escribir un programa universal que se anticipe al bloqueo de otro programa.

Sin embargo, es una interesante aproximación al análisis de terminación, muy importante a la hora de corregir programas, y resulta muy útil para verificar nuestras aplicaciones, ya que su implementación es fácil y consume muy pocos recursos.

Comentarios

Entradas populares de este blog

Algoritmo de relleno

Problema de las N reinas

Cifrado de Vernam