Habe nur einen kurzen Blick drauf geworfen, zwei Sachen fielen mir auf:
1) In der Verbraucherschleufe befindet sich ein Wait. Da aber diese Schleife von der oberen Schleufe aus mittels der der Funktion "Element aus Queue entfernen" synchronisiert wird, ist so ein zusätzliches Wait kontrapunktiv bis schädlich.
2) Stop funktioniert nicht: Die obere Schleife wird beendet. In der unteren Schleife wartet die Funkton "Element aus Queue entfernen" unendlich lange, bis ein Element kommt. Es kommt aber nichts mehr.
Abhilfe z.B auf etwas brutale Art: Beim Beenden der oberen Schleife die Queue zerstören. Das bekommt die Funktion "Element aus Queue entfernen" in der unteren Schleife mit und gibt einen Fehler aus, mit dem sich die Schleife beenden läßt.
Oder alternativ: Dafür sorgen, daß bei Betätigen von "Stop" in der oberen Schleife noch eine Meldung gesendet wird.