Diskussion:Aktives Warten
alte Disku
Die englische Wiki ist wesentlich ausführlicher.
In diesem Artikel wird zweimal auf "große Nachteile" hingewiesen. Besser wäre es, die Alternativen aufzuzeigen und genau zu beschreiben, wann aktives warten sinnvoll ist.
Spinning ist laut engl. Wiki ein Synonym für Aktives Warten (Busy waiting), sollte hier erwähnt werden.
In der engl. Wiki steht ein Beispiel, das aktives Warten bei Hardwareanschaltungen im Mikrosekundenbereich die richtige Wahl ist. Ich halte das ebenfalls für wichtig zu erwähnen.
Beim aktiven Warten kann es selbstverständlich sein, dass in der Warteschleife ein wait(millisekunden) eingebaut ist, oder die Abfrage (Polling_(Informatik)) nicht hochzyklisch erfolgt indem in der Warteschleife weitere Aktivitäten erfolgen. Das hochzyklische Polling verhindert gegebenenfalls, dass der andere Prozess überhaupt reagieren kann bzw. bindet Ressourcen. Dabei sollte es aber den Hinweis geben, dass eine einfache Warteschleife der Art
for(int i=0; i<1000; i++); //zählt einfach durch zwecks CPU-Zeitverbrauch
vom Optimierer eines Compilers wegoptimiert werden könnte, ohne dass man es ahnt. Mögliche Lösung ist hier der Einsatz einer volatile-Variable, die das fälschliche Optimieren verhindert. Außerdem muss hier die tatsächliche Rechenzeit beachtet werden.
Der Artikel Spinlock bezieht sich auf Aktives Warten wegen einem Lock, also einer Anwendung des Aktiven Wartens, und hat seine eigene Berechtigung. Ihn würde ich erstmal so stehenlassen. In früheren Diskussionen unter anderem bei Mutex habe ich auf eine Vereinigung hingewiesen, würde ich jetzt, nach eingehender Beschäftigung aber nicht mehr so sehen.
Kann jemand eventuell ausgehend von der engl. Wiki hier mal eine komplette Überarbeitung wagen? Ich habe eben Polling_(Informatik) verfasst, was hier einen Zusammenhang hat, aber nicht das selbe ist, und bin bei Mutex beschäftigt. Vielleicht kann man das per Diskussionsseite koordinieren?
--HartmutS 10:27, 14. Apr 2006 (CEST)
Funktion warte_bis
Ich finde die Funktion warte_bis etwas irreführend. Sie macht es unnötig umständlich. Das eigentliche aktive Warten ist doch nur die "solange"-Zeile. (nicht signierter Beitrag von Nivram (Diskussion | Beiträge) 14:27, 11. Sep. 2006 (CEST))
Prioritätsinversion
"Zu einer Prioritätsinversion kann es führen, ..." ist natürlich Unsinn, denn wie im Artikel über Prioritätsinversion nachzulesen ist, sind dazu mindestens drei Prozesse bzw. Threads notwendig. Daher die Änderung, denn der hier geschilderte Fall stellt eine klassische Verklemmung dar: Beide Prozesse blockieren sich gegenseitig, keiner kann fortschreiten. Die im Tanenbaum zitierte Stelle, die so etwas behauptet, habe ich übrigens nicht gefunden. Bitte Seitenangabe!
Zur obigen Frage: Aktives Warten ist nur dann sinnvoll, wenn es eine Verarbeitungseinheit (2. Prozessor oder Peripheriegerät) gibt, die unabhängig vom wartenden Prozessor ihren Zustand ändern kann. Bei Peripheriegeräten, die keine Unterbrechungsanforderung stellen können, ist aktives Warten eben ein Notbehelf. In Monoprozessorsystemen bedeutet aktives Warten zur Synchronisation von Prozessen (Spinlock) nur schändliche Verschwendung von Rechenzeit!