RE: Erzeuger/Verbraucher
In die untere Schelife gehört normalerweise kein Wait rein. Die Queue-Funktion "Element entfernen" wartet so lange, bis wieder etwas in der Queue ist, und synchronisiert sich damit von selbst mit der anderen Schleife. Eine CPU-Überlastung ist da auch nicht zu befürchten, solange die Erzeugung in der oberen Schleife nicht mit unendlich hoher Rate geschieht.
Ein andere Möglichkeit der Synchronisation ist die von der Erzeugerseite her. Wenn die Queue voll ist, wartet nämlich die Funktion "Element einfügen" so lange, bis wieder Platz in der Queue ist. (Bei unbegrenzter Queue-Länge kommt es statt dessen, wie hier passiert, zum Memory-Fehler)
Also Du hast zwei Möglichkeiten:
a) Wait in die obere Schleife (Wait entfällt, wenn der Erzeugerprozess von sich aus Zeit beansprucht)
b) Wait in der unteren Schleife lassen, aber die Queue-Länge von unbegrenzt auf einen sinnvollen Wert ändern.
Bei Variante b) ist zu beachten, daß die Verarbeitung in der Verbraucherschleife nicht aktuell ist. Die Schlange ist immer voll, und das älteste Element, welches womöglich lange Zeit vorher erzeugt wurde, wird vom Verbraucher verarbeitet.
|