C#信號(hào)量用法簡單示例
本文實(shí)例講述了C#信號(hào)量用法。分享給大家供大家參考,具體如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
/*
* 標(biāo)題:如何使用信號(hào)量的示例代碼
* Author:kagula
* Date:2015-6-16
* Environment:VS2010SP1, .NET Framework 4 client profile, C#.
* Note:[1]“信號(hào)量”可以看成是“授權(quán)(證)池”。
* 一個(gè)授權(quán)(證)池內(nèi)有零個(gè)或多個(gè)授權(quán)(證)。
* [2]下面的示例sem of Semaphore相當(dāng)于最多只能有一個(gè)授權(quán)(證)的授權(quán)池。
* [3]每調(diào)用一次sem.Release添加一個(gè)授權(quán)(證)。
* 連接調(diào)用多次sem.Release導(dǎo)致超出授權(quán)池所能容納的授權(quán)(證)數(shù)量,會(huì)拋出異常。
* [4]每調(diào)用一次sem.WaitOne就使用一個(gè)授權(quán)(證)。
* */
namespace kagula
{
class mySemaphore
{
//第一個(gè)參數(shù),代表當(dāng)前授權(quán)次數(shù)。
// 0表示沒有授權(quán)(證)。
//第二個(gè)參數(shù),代表Semaphore實(shí)例最多能容納幾個(gè)授權(quán)證。
// 1表示最大授權(quán)次數(shù)為1次。
// 超出允許的授權(quán)次數(shù),比如說sem.Release連續(xù)調(diào)用了兩次,會(huì)拋出異常。
public static Semaphore sem = new Semaphore(0, 1);
public static void Main()
{
//添加一次授權(quán)。
//釋放一個(gè)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 + "正在等待一個(gè)許可(證)……");
//如果不加參數(shù)會(huì)導(dǎo)致無限等待。
if (mySemaphore.sem.WaitOne(1000))
{
Console.WriteLine(thrd.Name + "申請到許可(證)……");
Thread.Sleep(500);
//雖然下面添加了許可,但是,其它線程可能沒拿到許可,超時(shí)退出了。
Console.WriteLine(thrd.Name + "添加一個(gè)許可(證)……");
mySemaphore.sem.Release();
}
else
{
Console.WriteLine(thrd.Name + " 超時(shí)(等了一段時(shí)間還是沒拿到許可(證))退出……");
}
}
}//end class
}//end namespace
更多關(guān)于C#相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《C#程序設(shè)計(jì)之線程使用技巧總結(jié)》、《C#操作Excel技巧總結(jié)》、《C#中XML文件操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結(jié)》、《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#數(shù)組操作技巧總結(jié)》及《C#面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》
希望本文所述對大家C#程序設(shè)計(jì)有所幫助。
欄 目:C#教程
下一篇:WPF的ListView控件自定義布局用法實(shí)例
本文標(biāo)題:C#信號(hào)量用法簡單示例
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/6378.html
您可能感興趣的文章
- 01-10C#線程隊(duì)列用法實(shí)例分析
- 01-10C#中Socket通信用法實(shí)例詳解
- 01-10C#中的事務(wù)用法實(shí)例分析
- 01-10C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量二
- 01-10C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量三
- 01-10C#實(shí)現(xiàn)基于加減按鈕形式控制系統(tǒng)音量及靜音的方法
- 01-10C#中Arraylist的sort函數(shù)用法實(shí)例分析
- 01-10C#中yield用法使用說明
- 01-10C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量一
- 01-10C#數(shù)據(jù)庫操作的用法


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-10delphi制作wav文件的方法
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05DEDE織夢data目錄下的sessions文件夾有什


