Microsoft/C#
BlockingQueue
unD3R
2014. 5. 19. 14:42
BlockingQueue
설명
개발을 하다보면, 종종 MessageQueue 같은게 필요합니다. Thead 에 Safe 한 이러한 큐를 Semapore 를 이용하여 간단히 만들어 보았습니다.
Queue 안에 값이 있으면, Dequeue 가 정상적으로 되고, 만약 값이 들어있지 않다면, 새로운 값이 Enqueue 될때까지 block 상태가 됩니다. 이후 값이 들어오면 자동으로 dequeue 가 됩니다.
[BlockingQueue]
public class BlockingQueue<T>
{
Queue<T> que = new Queue<T>();
Semaphore sem = new Semaphore(0, Int32.MaxValue);
public void Enqueue(T item) {
lock (que) {
que.Enqueue(item);
}
sem.Release();
}
public T Dequeue() {
sem.WaitOne();
lock (que) {
return que.Dequeue();
}
}
}