„Endlosschleife (Programmierung)“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
K →‎Weitere Fälle: Das auch noch
Markierungen: Mobile Bearbeitung Bearbeitung von einer mobilen Anwendung Bearbeitung mit Android-App
K wenns.danns
Markierungen: Mobile Bearbeitung Bearbeitung von einer mobilen Anwendung Bearbeitung mit Android-App
Zeile 1: Zeile 1:
{{Dieser Artikel|befasst sich mit dem Begriff in der Informatik. Zur Verwendung von Endlosschleifen im Film siehe [[Synchronisation_(Film)#Magnetband|Synchronisation (Film)]].}}
{{Dieser Artikel|befasst sich mit dem allgemeinen Begriff speziell in der Informatik. Zur Verwendung von Endlosschleifen im Film siehe [[Synchronisation_(Film)#Magnetband|Synchronisation (Film)]].}}


'''Endlosschleifen''' sind sich selbst wiederholende Abläufe.
'''Endlosschleifen''' sind sich selbst wiederholende Abläufe.

Version vom 28. Mai 2023, 16:31 Uhr

Endlosschleifen sind sich selbst wiederholende Abläufe.

Computerprogramme

In der Informatik sind es Schleifen, die nach jeder Abarbeitung erneut abgearbeitet werden, falls die Ausführung nicht durch äußere Einflüsse abgebrochen wird. Äußere Einflüsse sind dabei solche, die im regulären Ablauf des Programms nicht vorgesehen sind, beispielsweise das Abschalten des Computers. Es gibt jedoch auch Programme mit absichtlichen Endlosschleifen, bspw. Ereignisschleifen (englisch event loop oder message dispatcher), darunter solche, die ohne aktives Warten auskommen.

Programmierung

Infinite loop/Endlosschleife laut Blue Screen Of Death

Endlosschleifen können bei der Programmierung durch Fehler entstehen, wenn die Abbruchbedingung nicht definiert ist oder nicht eintreten kann. Genaugenommen ist zu unterscheiden, ob eine Schleife kein Abbruchkriterium hat, ob es nie erfüllt ist oder ob dieses nur für bestimmte Eingangsparameter der Fall ist. Der erste Fall wird entweder ganz bewusst gewählt oder kann durch Debuggen des Programms einfach gefunden werden. Der zweite verhält sich konzeptionell ähnlich, der letzte Fall ist fast immer unerwünscht und kann sehr schwer zu finden sein, da er nur sehr selten eintritt. Dies tritt ein, wenn der Zustand des Programms zu Beginn der Schleife die Schleifeninvariante nicht erfüllt.

Fehlerhafte Abbruchbedingungen verursachen häufig unbeabsichtigte Endlosschleifen. Je nach Programm kann sich ein solcher Fehler unterschiedlich äußern. Falls innerhalb des Schleifenrumpfs wiederholt Ressourcen – wie beispielsweise Hauptspeicher – belegt und nicht wieder freigegeben werden, so führt dies im Allgemeinen zu einem Speicherleck. Endlosschleifen können sich aber auch durch simple Inaktivität des Programms dem Benutzer gegenüber äußern („Einfrieren“).

Bei Geräten, bei denen kein geordnetes Abschalten („Herunterfahren“) vorgesehen ist, gibt es oft zumindest eine Endlosschleife, die in dessen Grundzustand auf Benutzereingaben wartet.

Sofern ein Computersystem Möglichkeiten zum geordnete Abbrechen eines Programms oder Ablaufs bietet, können Programme auch absichtlich Endlosschleifen besitzen. Üblich ist dies bei Multitasking-Systemen für „Event-Schleifen“, die auf Benutzereingaben warten. Bei einem Singletasking-System arbeitet allenfalls eine gleichzeitig. Endlosschleifen werden dann über die gebotenen äußeren Abbruchmöglichkeiten beendet.

Beispiele

  • Eine Iteration, welche die Abbruchbedingung nicht erfüllt.
int number = 0;

while (number < 10) {
    // Hier fehlt ein Inkrement der Variable.
    // Beispiel: number += 1;
}

oder

double number = 0.1;

while (number != 1.0) {
    number += 0.1;
    
    // Da 0.1 in binärer Form periodisch ist, wird 1.0 nie exakt erreicht.
}
void recursion(int number) {
    // Hier fehlt eine Abbruchbedingung.
    // Beispiel: if (number >= 10) return;
    
    recursion(number + 1);
}
  • Der einfachste Fall für eine Endlosschleife ist eine Schleifenbedingung, die immer wahr ist. Wenn jedoch innerhalb der Schleife eine oder mehrere break-Anweisungen stehen, dann ist es keine Endlosschleife mehr.
int number = 0;

while (true) {
    // Hier fehlt ein Schleifenabbruch.
    // Beispiel: if (number >= 10) break;
    
    number += 1;
}
  • Ein Sprungbefehl, der das Programm nie verlässt.
int number = 0;

begin:

// Hier fehlt ein bedingter Sprung.
// Beispiel: if (number >= 10) goto end;
number += 1;
goto begin;

end:

Gegenmaßnahmen

Um unbeabsichtigten Endlosschleifen in Programmen vorzubeugen, kann die Schleifenbedingung formal verifiziert werden (z. B. mit dem wp-Kalkül). Das ist jedoch bereits bei kleinen Programmen ein sehr aufwändiger Prozess und im Allgemeinen sogar ein unlösbares Problem (siehe Halteproblem).

Eine andere Methode, die unbeabsichtigte Endlosschleifen zwar nicht verhindern kann, sie jedoch zeitlich begrenzt, ist ein sog. Watchdog: Wenn ein Programm nicht mehr regelmäßig signalisiert, dass es vorschriftsmäßig läuft, kann dieser entsprechend reagieren (z. B. den Benutzer benachrichtigen oder das Programm beenden).

Weitere Fälle

  • Manche geometrische Figuren sind mögliche Endlosschleifen, wie der Kreis oder das Möbiusband.
  • Endloses Tonband geht auf Bernard Cousino zurück.
  • Eine akustische Rückkopplung ist eine Endlosschleife, da das immer gleiche Schallmuster erst von den Lautsprechern ausgegeben, vom Mikrofon wieder aufgenommen, und so wiederkehrend ausgegeben wird.
  • In Glossaren oder Lexika wird eine Endlosschleife manchmal rekursiv – anhand des praktischen Beispiels ihrer selbst – erläutert:
Endlosschleife – siehe Endlosschleife
  • In der deutschen Umgangssprache wird der Begriff Endlosschleife bisweilen benutzt, um einen Vorgang zu beschreiben, bei dem sich „die Katze in den Schwanz beißt“, zum Beispiel:
  • Eine Diskussion „dreht sich im Kreis“. Sie scheint ohne zusätzliche Hinweise von außen, mithin neue Argumente nicht in absehbarer Zeit zu einem Ergebnis zu führen.
  • In einem „Teufelskreis“ ist die Folge eines Problems gleichzeitig dessen Ursache, wodurch eine Lösung des Problems unmöglich ist und sich endlos fortsetzt.

Siehe auch

Wiktionary: Endlosschleife – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen