ホームページ  >  記事  >  バックエンド開発  >  C# マルチスレッドでのセマフォの使用の詳細な説明

C# マルチスレッドでのセマフォの使用の詳細な説明

黄舟
黄舟オリジナル
2017-09-02 14:28:072483ブラウズ

この記事では主に C# マルチスレッドにおけるセマフォの使い方を詳しく紹介します。興味のある方は参考にしてください。

セマフォ: スレッドにシグナルを実行させるためのプールとして理解できます。プール シグナルの数により、同じ数のスレッドを同時に実行できます。


private static void MultiThreadSynergicWithSemaphore()
  {
   //0表示创建Semaphore时,拥有可用信号量数值
   //1表示Semaphore中,最多容纳信号量数值
   Semaphore semaphore = new Semaphore(0, 1);


   Thread thread1 = new Thread(() =>
   {
    //线程首先WaitOne等待一个可用的信号量
    semaphore.WaitOne();
    //在得到信号量后,执行下面代码内容
    Console.WriteLine("thread1 work");
    Thread.Sleep(5000);
    //线程执行完毕,将获得信号量释放(还给semaphore)
    semaphore.Release();
   });


   Thread thread2 = new Thread(() =>
   {
    semaphore.WaitOne();
    Console.WriteLine("thread2 work");
    Thread.Sleep(5000);
    semaphore.Release();
   });
   thread2.Start();
   thread1.Start();
   //因在创建Semaphore时拥有的信号量为0
   //semaphore.Release(1) 为加入1个信号量到semaphore中
   semaphore.Release(1);
  }

説明:

1. semaphore.Release(n), n>semaphore が最大セマフォを収容できる場合、例外が発生します。
2. セマフォの所有するセマフォが 1 の場合、セマフォは Mutex と同等になります。
3. セマフォの所有するセマフォが 1 の場合、このとき複数のスレッドで同時にセマフォの数を取得できます。セマフォを取得したスレッドは同時に実行されると考えられます(実際の状況はCPUコア数やCPU同時消費スレッド数に関係する可能性があります)

以上がC# マルチスレッドでのセマフォの使用の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。