この記事では主に 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 サイトの他の関連記事を参照してください。