Programing/C#

(C#) Semaphore Release

Sang12 2014. 7. 8. 21:33

       

 

Queue<Thread> Q = new Queue<Thread>();  //쓰레드형으로 큐 선언

 

private void enterRelease()
 {

                if (this.Q.Count > 0)  

//Q카운터가 0보다크면 Release 쓰레드를 풀어줌
                {
                     Thread tempThread = this.Q.Dequeue();
                    lock (tempThread)
                    {
                        Monitor.Pulse(tempThread);
                    }
                }
                else
                {
                    this.enternumber++;
                }

        }

 

큐 카운터가 0보다 크면 tempThread 에 큐에 들어있는 Thread를 받고

Monitor를 이용해 tempThread를 다시 활성하 해준다

 

그리고 0 이거나 0보다 작으면 enternumber를 1 증가시켜 줍니다.

그리고 저 lock도 동기화 하는 방식인데 저렇게 해야 모니터를 쓸수가있더라구요 ㅎ

삽질 하다가 어떻게 하긴했는데 왜 그런지는 정확히 모르겠네요~ 즐코딩하세요!