Class Kata "Bounded Queue"

Develop a queue class with limited length for communication between multiple threads.

Reading threads take elements; if the queue is empty, they block and wait for the next element.

Writing threads add elements; if the queue is full, they block and wait for another thread to remove an element.

The interface of the class should look like this:

class BoundedQueue {
	BoundedQueue(int size) {...}
	void Enqueue(T element) {...}
	T Dequeue() {...}
	int Count() {...} // Number of elements in queue
	int Size() {...} // Max. Number of elements

Example of use:

Class Kata Bounded Queue - Clean Code Developer Akademie

Neglect performance aspects.

Variation #1

Add two functions to the class:

class BoundedQueue {
	bool TryEnqueue(T element, int timeoutMsec) {...}
	bool TryDequeue(int timeoutMsec, out T element) {...}

Setting/reading should optionally only block for a certain period of time. If the action is successful during this time, the true is returned, otherwise false.