C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のセマフォ


セマフォクラスを使用すると、クリティカルセクションにアクセスできるスレッドの数に制限を設定できます。このクラスは、リソースのプールへのアクセスを制御するために使用されます。 System.Threading.Semaphoreは、Semaphoreの実装に必要なすべてのメソッドとプロパティを備えているため、Semaphoreの名前空間です。

C#でセマフォを使用するには、セマフォオブジェクトのインスタンスをインスタンス化する必要があります。少なくとも2つの引数があります-

参照

MSDN

コンストラクターと説明
Sr.No。
1 セマフォ(Int32、Int32)
Semaphoreクラスの新しいインスタンスを初期化し、エントリの初期数と同時エントリの最大数を指定します。
2 セマフォ(Int32、Int32、String)-
Semaphoreクラスの新しいインスタンスを初期化し、エントリの初期数と同時エントリの最大数を指定し、オプションでシステムセマフォオブジェクトの名前を指定します。
3 セマフォ(Int32、Int32、String、Boolean)
Semaphoreクラスの新しいインスタンスを初期化し、エントリの初期数と同時エントリの最大数を指定し、オプションでシステムセマフォオブジェクトの名前を指定し、新しいシステムセマフォが作成されたかどうかを示す値を受け取る変数を指定します。

例を見てみましょう:

ここでは、Semaphoreクラスの新しいインスタンスを初期化し、同時エントリの最大数を指定し、オプションでいくつかのエントリを予約する、次のSemaphoreコンストラクタを使用しました。

static Semaphore semaphore = new Semaphore(2, 2);

using System;
using System.Threading;
namespace Program
{
class Demo
   {
      static Thread[] t = new Thread[5];
      static Semaphore semaphore = new Semaphore(2, 2);
      static void DoSomething()
      {
         Console.WriteLine("{0} = waiting", Thread.CurrentThread.Name);
         semaphore.WaitOne();
         Console.WriteLine("{0} begins!", Thread.CurrentThread.Name);
         Thread.Sleep(1000);
         Console.WriteLine("{0} releasing...", Thread.CurrentThread.Name);
         semaphore.Release();
      }
      static void Main(string[] args)
      {
         for (int j = 0; j < 5; j++)
         {
            t[j] = new Thread(DoSomething);
            t[j].Name = "thread number " + j;
            t[j].Start();
         }
         Console.Read();
      }
   }
}

出力

以下は出力です

thread number 2 = waiting
thread number 0 = waiting
thread number 3 = waiting
thread number 1 = waiting
thread number 4 = waiting
thread number 2 begins!
thread number 1 begins!
thread number 2 releasing...
thread number 1 releasing...
thread number 4 begins!
thread number 3 begins!
thread number 4 releasing...
thread number 0 begins!
thread number 3 releasing...
thread number 0 releasing...

  1. JavaScriptの番号パターン

    ユーザーにテキスト入力とボタンを提供するJavaScriptおよびHTMLプログラムを作成する必要があります。ユーザーが入力に任意の値(たとえば5)を入力してボタンをクリックすると、画面に次のパターンが印刷されます。 (n =5の場合) 01 01 02 01 02 03 01 02 03 04 01 02 03 04 05 例 このためのコードは-になります <html> <head> <title>JavaScript Number Patterns</title> <script type="text/javascrip

  2. C++五胞体数

    五胞体数は、パスカルの三角形の5番目の数として表されます。ご存知のように、これは5番目の数字です。つまり、パスカルの三角形に少なくとも5つの数字が必要です。したがって、このシリーズの最初の数字は 1 4 6 4 1から始まります。 パスカルの三角形の4行目。したがって、このチュートリアルでは、たとえば、n番目の五胞体数を見つける必要があります Input : 1 Output : 1 Input : 4 Output : 35 次の図から出力を確認できます- この問題については、可能な限り、これは一種のシリーズであるため、ソリューションでこのシリーズのパターンを見つけようと