我正在用Silverlight 4开发。Silverlight中没有信号量?
线程在那里。 WaitHandles(AutoResetEvent,ManualResetEvent)也存在。但没有信号量?我错过了什么吗?
我正在用Silverlight 4开发。Silverlight中没有信号量?
线程在那里。 WaitHandles(AutoResetEvent,ManualResetEvent)也存在。但没有信号量?我错过了什么吗?
我创建了我自己的Semaphore for Silverlight。
实际上,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的第二个答案,这是优于第一的居然是线程安全的。
请注意,该链接上的“绿色”答案不是线程安全的。使用显示锁定的版本。 –