Laço infinito

Um laço infinito é uma sequência de instruções em um programa de computador que repete infinitamente, ou porque não há condição de parada ou porque a condição existe mas nunca é atingida. Em antigos sistemas operacionais com multitarefa cooperativa, laços infinitos normalmente bloqueavam todo o sistema. Com o modelo atual de multitarefa preemptiva, laços infinitos resultam no consumo máximo do tempo do processador, mas o processo geralmente pode ser terminado pelo utilizador. Espera ativa é confundida com laços infinitos. Uma causa possível do travamento dum computador é um laço infinito, e outras causas incluem deadlocks e falhas de segmentação.[1][2]

Há diversas situações em que o laço infinito é um comportamento esperado. Por exemplo, diversos programas servidores repetem infinitamente, esperando uma requisição, tratando a requisição, e voltando a esperar outra requisição. Chamado laço de eventos, esse tipo de construção não é considerado um laço infinito no sentido estrito do termo, pois o término manual do programa serve como condição válida de parada. O termo "laço infinito" é geralmente usado quando esse efeito não é o resultado esperado, isto é, quando há um defeito.

Ainda que a maioria dos laços infinitos possam ser encontrados numa revisão detalhada do código, não há método genérico para determinar se um dado programa terminará ou será executado infinitamente, fruto da inabilidade de decisão do problema da parada.

Recursividade infinita

A recursividade infinita é um caso especial de laço infinito causado por recursividade. Assim como num laço de repetição, a recursividade também depende duma condição de parada, que nunca é atingida na recursividade infinita. Nesse caso, a recursividade continua até o estouro de pilha do sistema. Um exemplo trivial é o termo Ω no cálculo Lambda, demonstrado abaixo em Scheme:

(define Ω  (let ([ω (lambda (f) (f f))])    (ω ω)))

Referências

Ver também