2011-08-16 4 views

답변

2

사실, Silverlight에는 세마포어가 없습니다. SL 용 스레딩 라이브러리는 제한되어 있습니다. 그러나 당신은 매우 쉽게 자신을 만들 수 있습니다. 이 코드는 실제로 스레드 안전 것에 대한 제 선호된다 this post 번째 대답에 기초

public class Semaphore 
{ 
    private object Mutex { get; set; } 
    private int Count { get; set; } 
    private int Max { get; set; } 

    public Semaphore(int max = 1) 
    { 
     Mutex = new object(); 
     Max = max; 
    } 

    public void WaitOne() 
    { 
     while (true) 
     { 
      lock (Mutex) 
      { 
       if (Count < Max) 
       { 
        Count++; 
        return; 
       } 
      } 

      Thread.Sleep(50); 
     } 
    } 

    public void Release() 
    { 
     lock (Mutex) 
     { 
      if (Count >= 0) 
      { 
       Count--; 
      } 
     } 
    } 
} 

다음은 예이다.

+2

해당 링크의 "녹색"답변은 스레드로부터 안전하지 않습니다. 잠금 기능을 보여주는 버전으로 이동하십시오. –

관련 문제