Sonsuz döngü (Bilgisayar)

Sonsuz döngü, çeşitli sebeplerle sonsuza kadar döngüye giren ve sonlanamayan bilgisayar programı komutu parçalarına verilen ad. Bu sebepler döngünün; bir sonlandırıcı koşulun bulunmaması, bulunsa da hiçbir zaman sağlanamayacak olması ya da bu koşulun döngünün her seferinde yeniden başlamasına neden olması olabilir. Zaman paylaşımlı eski işletim sistemlerinde sonsuz döngüler tüm sistemin kilitlenmesine sebep oluyordu. Günümüzdeki yaygın olan ve öncelikli çoklugörev modelini kullanan sistemlerde ise bu döngüler tüm işlemci zamanını harcasa da kullanıcı tarafından sonlandırılabilir. Meşgul bekleme döngüleri de zaman zaman "sonsuz döngü" olarak adlandırılabilir. Bir bilgisayarın "donma"sının muhtemel sebepleri bir sonsuz döngü, deadlock ya da izinsiz bellek erişimi olabilir.

Bilinçli ve bilinçsiz sonsuz döngüler 
Bir döngü, belirli bir koşul sağlanana kadar tekrar eden komutlardan oluşur. Sonsuz döngü ise bir sebepten bu koşulun hiçbir zaman sağlanamaması sonucunda ortaya çıkar.

Bilinçli sonsuz döngü 
Bilinçli olarak sonsuz döngü yaratılan birkaç durum vardır. Örneğin, kaset ya da kartuşla çalışan eski oyun konsollarında programın çıkış yapacağı bir işletim sistemi olmadığından konsol kapatılana kadar program sonsuz döngüde kalırdı.

Modern bilgisayarlarda da bilgisayar devamlı olarak bir kullanıcı girdisi beklediği için bilgisayar kapatılana ya da yeniden başlatılana kadar devam eden "sistem boşta işlemi" bulunur.

Bilinçsiz sonsuz döngü 
Çoğunlukla sonsuz döngü kavramı bilinçli olarak ortaya çıkmaz ve bir bug sonucu oluşur. Çoğu sonsuz döngü debug yöntemleriyle ortaya çıkarılabilir; fakat bunun için genel bir yöntem mevcut değildir. Bir programın sonlanıp sonlanmayacağı sorusu sonlandırma sorununun kararsızlığıdır.

C dilinde yazılmış basit bir örnek:

#include <stdio.h>
main()
{
  while(1) {
    printf("Sonsuz döngü\n");
  }
}

Bu döngü sonlanmadan devamlı ekrana "Sonsuz döngü" yazar.

Ayrıca bakınız 
 Döngü tespiti
 Deadlock
 Özyineleme

Yazılım hataları
Programlama
Özyineleme