C#旌旗燈號量用法簡略示例。本站提示廣大學習愛好者:(C#旌旗燈號量用法簡略示例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#旌旗燈號量用法簡略示例正文
本文實例講述了C#旌旗燈號量用法。分享給年夜家供年夜家參考,詳細以下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; /* * 題目:若何應用旌旗燈號量的示例代碼 * Author:kagula * Date:2015-6-16 * Environment:VS2010SP1, .NET Framework 4 client profile, C#. * Note:[1]“旌旗燈號量”可以算作是“受權(證)池”。 * 一個受權(證)池內有零個或多個受權(證)。 * [2]上面的示例sem of Semaphore相當於最多只能有一個受權(證)的受權池。 * [3]每挪用一次sem.Release添加一個受權(證)。 * 銜接挪用屢次sem.Release招致超越受權池所能包容的受權(證)數目,會拋出異常。 * [4]每挪用一次sem.WaitOne就應用一個受權(證)。 * */ namespace kagula { class mySemaphore { //第一個參數,代表以後受權次數。 // 0表現沒有受權(證)。 //第二個參數,代表Semaphore實例最多能包容幾個受權證。 // 1表現最年夜受權次數為1次。 // 超越許可的受權次數,好比說sem.Release持續挪用了兩次,會拋出異常。 public static Semaphore sem = new Semaphore(0, 1); public static void Main() { //添加一次受權。 //釋放一個sem.WaitOne()的壅塞。 sem.Release(); myThread mythrd1 = new myThread("Thrd #1"); myThread mythrd2 = new myThread("Thrd #2"); myThread mythrd3 = new myThread("Thrd #3"); myThread mythrd4 = new myThread("Thrd #4"); mythrd1.thrd.Join(); mythrd2.thrd.Join(); mythrd3.thrd.Join(); mythrd4.thrd.Join(); //input any key to continue... Console.ReadKey(); }//end main function }//end main class class myThread { public Thread thrd; public myThread(string name) { thrd = new Thread(this.run); thrd.Name = name; thrd.Start(); } void run() { Console.WriteLine(thrd.Name + "正在期待一個允許(證)……"); //假如不加參數會招致無窮期待。 if (mySemaphore.sem.WaitOne(1000)) { Console.WriteLine(thrd.Name + "請求到允許(證)……"); Thread.Sleep(500); //固然上面添加了允許,然則,其它線程能夠沒拿到允許,超時加入了。 Console.WriteLine(thrd.Name + "添加一個允許(證)……"); mySemaphore.sem.Release(); } else { Console.WriteLine(thrd.Name + " 超時(等了一段時光照樣沒拿到允許(證))加入……"); } } }//end class }//end namespace
願望本文所述對年夜家C#法式設計有所贊助。