Class Kata „Bounded Queue“
Entwickle eine Warteschlangenklasse mit begrenzter Länge für die Kommunikation zwischen mehreren Threads.
Lesende Threads entnehmen Elemente; falls die Queue leer ist, blockieren sie und warten auf das nächste Element.
Schreibende Threads fügen Elemente an; falls die Queue voll ist, blockieren sie und warten darauf, dass ein anderer Thread ein Element entnimmt.
Das Interface der Klasse soll so aussehen:
class BoundedQueue<T> { BoundedQueue(int size) {...} void Enqueue(T element) {...} T Dequeue() {...} int Count() {...} // Anzahl Elemente in Queue int Size() {...} // Max. Anzahl Elemente }
Beispiel einer Nutzung:
Vernachlässige Performancegesichtspunkte.
Variation #1
Erweitere die Klasse um zwei Funktionen:
class BoundedQueue<T> { ... bool TryEnqueue(T element, int timeoutMsec) {...} bool TryDequeue(int timeoutMsec, out T element) {...} }
Das Einstellen/Auslesen soll optional nur für eine gewisse Zeitspanne blockieren. Falls die Aktion in dieser Zeit erfolgreich ist, wird true zurückgeliefert, sonst false.