OpenSimMirror/OpenGridServices.Manager/OpenGridServices.Manager/BlockingQueue.cs

34 lines
740 B
C#

using System;
using System.Threading;
using System.Collections.Generic;
using System.Text;
namespace OpenGridServices.Manager
{
public class BlockingQueue<T>
{
private Queue<T> _queue = new Queue<T>();
private object _queueSync = new object();
public void Enqueue(T value)
{
lock (_queueSync)
{
_queue.Enqueue(value);
Monitor.Pulse(_queueSync);
}
}
public T Dequeue()
{
lock (_queueSync)
{
if (_queue.Count < 1)
Monitor.Wait(_queueSync);
return _queue.Dequeue();
}
}
}
}