2011-08-16 32 views

回答

2

實際上,Silverlight中沒有信號量。 SL的線程庫受到限制。但是你可以非常輕鬆地製作你自己的。這裏有一個例子:

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

這個代碼是基於this post的第二個答案,這是優於第一的居然是線程安全的。

+2

請注意,該鏈接上的「綠色」答案不是線程安全的。使用顯示鎖定的版本。 –

相關問題