Beruflich Dokumente
Kultur Dokumente
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 }
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