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();
        }
    }
}







'Microsoft > C#' 카테고리의 다른 글

Implicit Operator  (0) 2014.11.17
BlockingQueue  (0) 2014.05.19
C#,JScript, VisualBasic 을 스크립트처럼 사용하기  (0) 2014.05.19
#warning, #error, #line 지시자  (0) 2014.05.08
인증서(certification) 만들기  (1) 2014.04.09
윈도우즈 방화벽 규칙 추가/설정/삭제하기  (2) 2014.03.27