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

このリンクの「緑色の」回答はスレッドセーフではありません。ロックを示すバージョンを確認してください。 –

関連する問題