Hervorragende Frage. Ich kann mich nicht erinnern, dass unser CS 102-Kurs eine einzelne Anwendung für die doppelte Warteschlange erwähnt hat.
Bis zum heutigen Tag ist die einzige mir bekannte Anwendung der im Wikipedia-Artikel erwähnte Arbeitsplaner .
Es funktioniert im Wesentlichen wie folgt:
In einem normalen Single-Threaded-Vorgehensmodell wird bei jedem Funktionsaufruf ein Aktivierungsdatensatz auf einem sogenannten Aufrufstapel abgelegt . Ein Aktivierungsdatensatz enthält die lokalen Variablen und Parameter dieses Aufrufs. Sobald der Aufruf der Methode abgeschlossen ist ("return"), wird der letzte Aktivierungsdatensatz vom Aufrufstapel abgerufen.
Dies ist besonders wichtig, da auf diese Weise die Rekursion implementiert wird: Die Struktur der Rekursion wird im aktuellen Status des Aufrufstapels dargestellt.
Beim Parallelisieren eines rekursiven Algorithmus können wir diese Eigenschaft ausnutzen, indem wir den Aufrufstapel durch eine Aufrufwarteschlange ersetzen. Jeder Thread in der Berechnung erhält eine eigene Aufrufwarteschlange und überträgt Aktivierungsdatensätze wie bei einer sequentiellen Ausführung.
Sobald ein Thread seine Arbeit beendet hat (= seine Anrufwarteschlange ist leer), stiehlt er Arbeit von einem anderen Thread, indem er einen Aktivierungsdatensatz aus der Anrufwarteschlange dieses Threads entfernt, indem er ihn vom "falschen" Ende entfernt.
Grundsätzlich fungiert die Anrufwarteschlange als zwei Anrufstapel, die jetzt zwei Threads bedienen.