Sie sind auf Seite 1von 2

Class Kata Bounded Queue

Entwickle eine Warteschlangenklasse mit begrenzter Lnge fr die Kommunikation zwischen mehreren Threads. Lesende Threads entnehmen Elemente; falls die Queue leer ist, blockieren sie und warten auf das nchste Element. Schreibende Threads fgen 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: Schreibender Thread


new BoundedQueue<int>(2) Enqueue(1) Enqueue(2) Enqueue(3) Enqueue(4) // blockiert // kommt frei

Queue 1

Lesender Thread

Dequeue() -> 1

2 2,3 3 3,4 4 5
-> 5 // kommt frei Dequeue() -> 2 Dequeue() -> 3 Dequeue() -> 4 Dequeue() // blockiert

Enqueue(5)

Vernachlssige Performancegesichtspunkte.

http://ccd-school.de

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 fr eine gewisse Zeitspanne blockieren. Falls die Aktion in dieser Zeit erfolgreich ist, wird true zurckgeliefert, sonst false.

http://ccd-school.de

Das könnte Ihnen auch gefallen