Here’s a simple implementation of a blocking queue in C#. This can be used for consumer producer scenarios, buffered messaging, worker pools etc.
using System.Collections.Generic; using System.Threading; namespace BlockingQueue{ public class BlockingQueue<T> { private Queue<T> q = new Queue<T>(); public void Enqueue(T element) { q.Enqueue(element); lock (q) { Monitor.Pulse(q); } } public T Get() { lock(q) { while (q.Count == 0) { Monitor.Wait(q); } return q.Dequeue(); } } } }
RSS - Posts