エクスポート (0) 印刷
すべて展開
この記事は翻訳者によって翻訳されたものです。 記事の文章にポインターを重ねると、原文のテキストが表示されます。
訳文
原文

SemaphoreSlim クラス

リソースまたはリソースのプールに同時にアクセスできるスレッドの数を制限する Semaphore の軽量版です。

System.Object
  System.Threading.SemaphoreSlim

名前空間:  System.Threading
アセンブリ:  mscorlib (mscorlib.dll 内)

[ComVisibleAttribute(false)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public class SemaphoreSlim : IDisposable

SemaphoreSlim 型で公開されるメンバーは以下のとおりです。

  名前説明
パブリック メソッドSemaphoreSlim(Int32)同時に許可される要求の初期数を指定して、SemaphoreSlim クラスの新しいインスタンスを初期化します。
パブリック メソッドSemaphoreSlim(Int32, Int32)同時に許可される要求の初期数および最大数を指定して、SemaphoreSlim クラスの新しいインスタンスを初期化します。
このページのトップへ

  名前説明
パブリック プロパティAvailableWaitHandleセマフォの待機に使用できる WaitHandle を返します。
パブリック プロパティCurrentCount SemaphoreSlim に入ることを許可されるスレッド数を取得します。
このページのトップへ

  名前説明
パブリック メソッドDispose() SemaphoreSlim クラスの現在のインスタンスによって使用されているすべてのリソースを解放します。
プロテクト メソッドDispose(Boolean)派生クラスでオーバーライドされると、ManualResetEventSlim によって使用されているアンマネージ リソースを解放し、オプションでマネージ リソースも解放します。
パブリック メソッドEquals(Object)指定した Object が、現在の Object と等しいかどうかを判断します。 (Object から継承されます。)
プロテクト メソッドFinalize オブジェクトがガベジ コレクションにより収集される前に、そのオブジェクトがリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。)
パブリック メソッドGetHashCode特定の型のハッシュ関数として機能します。 (Object から継承されます。)
パブリック メソッドGetType現在のインスタンスの Type を取得します。 (Object から継承されます。)
プロテクト メソッドMemberwiseClone現在の Object の簡易コピーを作成します。 (Object から継承されます。)
パブリック メソッドRelease()1 回だけ SemaphoreSlim を出ます。
パブリック メソッドRelease(Int32)指定された回数だけ、SemaphoreSlim から出ます。
パブリック メソッドToString 現在のオブジェクトを表す文字列を返します。 (Object から継承されます。)
パブリック メソッドWait() SemaphoreSlim に入るまで、現在のスレッドをブロックします。
パブリック メソッドWait(CancellationToken) CancellationToken を観察すると同時に、SemaphoreSlim に入るまで、現在のスレッドをブロックします。
パブリック メソッドWait(Int32)タイムアウト値を 32 ビット符号付き整数で指定して、SemaphoreSlim に入るまで、現在のスレッドをブロックします。
パブリック メソッドWait(TimeSpan) TimeSpan を使用してタイムアウトを指定し、SemaphoreSlim に入るまで、現在のスレッドをブロックします。
パブリック メソッドWait(Int32, CancellationToken) CancellationToken を観察すると同時に、タイムアウト値を 32 ビット符号付き整数で指定して、SemaphoreSlim に入るまで、現在のスレッドをブロックします。
パブリック メソッドWait(TimeSpan, CancellationToken) CancellationToken を観察すると同時に、タイムアウトを指定する TimeSpan を使用して、SemaphoreSlim に入るまで、現在のスレッドをブロックします。
このページのトップへ

SemaphoreSlim は、Windows カーネルのセマフォを使用しない、軽量セマフォ クラスを提供します。

メモメモ

この型またはメンバーに適用される HostProtectionAttribute 属性の Resources プロパティの値は、Synchronization | ExternalThreading です。 HostProtectionAttribute は、デスクトップ アプリケーション (通常、アイコンのダブルクリック、コマンドの入力、またはブラウザーへの URL の入力により起動されます) には影響しません。 詳細については、HostProtectionAttribute クラスのトピックまたは「SQL Server プログラミングとホスト保護属性」を参照してください。

SemaphoreSlim を使用する方法を次の例に示します。


using System;
using System.Threading;
using System.Threading.Tasks;

class SemaphoreSlimDemo
{
    // Demonstrates:
    //      SemaphoreSlim construction
    //      SemaphoreSlim.Wait()
    //      SemaphoreSlim.Release()
    //      SemaphoreSlim.AvailableWaitHandle
    static void Main()
    { 

        SemaphoreSlim ss = new SemaphoreSlim(2); // set initial count to 2
        Console.WriteLine("Constructed a SemaphoreSlim with an initial count of 2");

        Console.WriteLine("First non-blocking Wait: {0} (should be true)", ss.Wait(0));
        Console.WriteLine("Second non-blocking Wait: {0} (should be true)", ss.Wait(0));
        Console.WriteLine("Third non-blocking Wait: {0} (should be false)", ss.Wait(0));

        // Do a Release to free up a spot
        ss.Release();

        Console.WriteLine("Non-blocking Wait after Release: {0} (should be true)", ss.Wait(0));

        // Launch an asynchronous Task that releases the semaphore after 100 ms
        Task t1 = Task.Factory.StartNew(() =>
        {
            Thread.Sleep(100);
            Console.WriteLine("Task about to release SemaphoreSlim");
            ss.Release();
        });

        // You can also wait on the SemaphoreSlim via the underlying Semaphore WaitHandle.
        // HOWEVER, unlike SemaphoreSlim.Wait(), it WILL NOT decrement the count.
        // In the printout below, you will see that CurrentCount is still 1
        ss.AvailableWaitHandle.WaitOne();
        Console.WriteLine("ss.AvailableWaitHandle.WaitOne() returned, ss.CurrentCount = {0}", ss.CurrentCount);

        // Now a real Wait(), which should return immediately and decrement the count.
        ss.Wait();
        Console.WriteLine("ss.CurrentCount after ss.Wait() = {0}", ss.CurrentCount);

        // Clean up
        t1.Wait();
        ss.Dispose();
    }
}


.NET Framework

サポート対象: 4

.NET Framework Client Profile

サポート対象: 4

Windows 7, Windows Vista SP1 以降, Windows XP SP3, Windows Server 2008 (Server Core はサポート対象外), Windows Server 2008 R2 (SP1 以降で Server Core をサポート), Windows Server 2003 SP2

.NET Framework では、各プラットフォームのすべてのバージョンはサポートしていません。 サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

SemaphoreSlim のすべてのパブリックおよびプロテクト メンバーはスレッド セーフであり、複数のスレッドから同時に使用できます。ただし、SemaphoreSlim に対する他のすべての操作が完了したときにのみ使用する必要がある Dispose は例外です。

コミュニティの追加

追加
表示:
© 2014 Microsoft