程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#旌旗燈號量用法簡略示例

C#旌旗燈號量用法簡略示例

編輯:C#入門知識

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#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved