2011-08-16 59 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

请注意,该链接上的“绿色”答案不是线程安全的。使用显示锁定的版本。 –

相关问题