欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#信號量用法簡單示例

 更新時間:2016年07月05日 10:04:02   作者:kagula  
這篇文章主要介紹了C#信號量用法,結(jié)合簡單C#控制臺應(yīng)用程序形式分析了信號量的功能、定義、調(diào)用、釋放等操作技巧,需要的朋友可以參考下

本文實例講述了C#信號量用法。分享給大家供大家參考,具體如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
/*
 * 標(biāo)題:如何使用信號量的示例代碼
 * Author:kagula
 * Date:2015-6-16
 * Environment:VS2010SP1, .NET Framework 4 client profile, C#.
 * Note:[1]“信號量”可以看成是“授權(quán)(證)池”。
 *     一個授權(quán)(證)池內(nèi)有零個或多個授權(quán)(證)。
 *   [2]下面的示例sem of Semaphore相當(dāng)于最多只能有一個授權(quán)(證)的授權(quán)池。
 *   [3]每調(diào)用一次sem.Release添加一個授權(quán)(證)。
 *     連接調(diào)用多次sem.Release導(dǎo)致超出授權(quán)池所能容納的授權(quán)(證)數(shù)量,會拋出異常。
 *   [4]每調(diào)用一次sem.WaitOne就使用一個授權(quán)(證)。
 * */
namespace kagula
{
  class mySemaphore
  {
    //第一個參數(shù),代表當(dāng)前授權(quán)次數(shù)。
    //      0表示沒有授權(quán)(證)。
    //第二個參數(shù),代表Semaphore實例最多能容納幾個授權(quán)證。
    //      1表示最大授權(quán)次數(shù)為1次。
    //      超出允許的授權(quán)次數(shù),比如說sem.Release連續(xù)調(diào)用了兩次,會拋出異常。
    public static Semaphore sem = new Semaphore(0, 1);
    public static void Main()
    {
      //添加一次授權(quán)。
      //釋放一個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 + "正在等待一個許可(證)……");
      //如果不加參數(shù)會導(dǎo)致無限等待。
      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

更多關(guān)于C#相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《C#程序設(shè)計之線程使用技巧總結(jié)》、《C#操作Excel技巧總結(jié)》、《C#中XML文件操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結(jié)》、《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#數(shù)組操作技巧總結(jié)》及《C#面向?qū)ο蟪绦蛟O(shè)計入門教程

希望本文所述對大家C#程序設(shè)計有所幫助。

相關(guān)文章

  • C#實現(xiàn)日歷效果

    C#實現(xiàn)日歷效果

    這篇文章主要為大家詳細(xì)介紹了C#實現(xiàn)日歷效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C# 循環(huán)判斷會進(jìn)來幾次的實現(xiàn)代碼

    C# 循環(huán)判斷會進(jìn)來幾次的實現(xiàn)代碼

    這篇文章主要介紹了C# 循環(huán)判斷會進(jìn)來幾次的實現(xiàn)代碼,代碼中就一個循環(huán),循環(huán)的判斷是從一個函數(shù)獲取值,需要的朋友可以參考下
    2018-06-06
  • C#生成唯一不重復(fù)訂單號

    C#生成唯一不重復(fù)訂單號

    本文給大家介紹的是使用C#生成唯一不重復(fù)訂單號的方法,主要用到了lock鎖,有需要的小伙伴可以參考下。
    2015-07-07
  • WPF開發(fā)之實現(xiàn)一種三軸機械手控件

    WPF開發(fā)之實現(xiàn)一種三軸機械手控件

    這篇文章主要為大家詳細(xì)介紹了如何利用WPF實現(xiàn)簡單一種三軸機械手控件,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2023-01-01
  • c#生成高清縮略圖的二個示例分享

    c#生成高清縮略圖的二個示例分享

    這篇文章主要介紹了c#生成高清縮略圖的二個示例,需要的朋友可以參考下
    2014-04-04
  • WinForm ToolTip使用方法小結(jié)

    WinForm ToolTip使用方法小結(jié)

    這篇文章主要介紹了WinForm ToolTip使用方法小結(jié),對C#初學(xué)者有一定的借鑒參考價值,需要的朋友可以參考下
    2014-08-08
  • 登錄驗證全局控制的幾種方式總結(jié)(session)

    登錄驗證全局控制的幾種方式總結(jié)(session)

    在登陸驗證或者其他需要用到session全局變量的時候,歸結(jié)起來,主要有以下三種較方便的實現(xiàn)方式。(其中個人較喜歡使用第一種實現(xiàn)方法)
    2014-01-01
  • C#反射機制介紹

    C#反射機制介紹

    這篇文章介紹了C#的反射機制,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 常用.NET工具(包括.NET可再發(fā)行包2.0)下載

    常用.NET工具(包括.NET可再發(fā)行包2.0)下載

    常用.NET工具(包括.NET可再發(fā)行包2.0)下載...
    2007-03-03
  • C# 可空類型的具體使用

    C# 可空類型的具體使用

    這篇文章主要介紹了C# 可空類型的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評論