C# 多線程之一:訊號量Semaphore

來源:互聯網
上載者:User

Semaphore的理解

通過使用一個計數器對共用資源進行存取控制,Semaphore構造器需要提供初始化的計數器(訊號量)大小以及最大的計數器大小

訪問共用資源時,程式首先申請一個向Semaphore申請一個許可證,Semaphore的許可證計數器相應的減一,當計數器為0時,其他申請該訊號量許可證的線程將被堵賽,直到先前已經申請到許可證的線程釋放他佔用的許可證讓計數器加一,這樣最近去申請許可證的線程將會得到競爭得到被釋放的許可證。

常見的操作方法 WaitOne():申請一個許可證  Release():釋放佔用的許可證

具體使用看下面的範例程式碼:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace MutiThread{    /// <summary>    /// .net 訊號量Semaphore的使用    /// </summary>    class Program    {        static void Main(string[] args)        {            //初始化4個線程            Mythread mythrd1 = new Mythread("Thrd #1");            Mythread mythrd2 = new Mythread("Thrd #2");            Mythread mythrd3 = new Mythread("Thrd #3");            Mythread mythrd4 = new Mythread("Thrd #4");            //Join()方法阻塞調用線程             //達到主線程在4個子線程執行完畢才退出的目的            mythrd1.thrd.Join();            mythrd2.thrd.Join();            mythrd3.thrd.Join();            mythrd4.thrd.Join();        }    }    /// <summary>    /// 封裝線程類    /// </summary>    class Mythread    {        public Thread thrd;        //建立一個可授權2個許可證的訊號量,且初始值為2        static Semaphore sem = new Semaphore(2, 2);        public Mythread(string name)        {            thrd = new Thread(this.run);            thrd.Name = name;            thrd.Start();        }        void run()        {            Console.WriteLine(thrd.Name + "正在等待一個許可證……");            //申請一個許可證            sem.WaitOne();            Console.WriteLine(thrd.Name + "申請到許可證……");            for (int i = 0; i < 4; i++)            {                Console.WriteLine(thrd.Name + ": " + i);                Thread.Sleep(1000);            }            Console.WriteLine(thrd.Name + " 釋放許可證……");            //釋放許可證            sem.Release();        }    }}

 

程式執行結果為:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.