多線程之信號量——SemaphoreSlim


簡單介紹:

C#的SemaphoreSlim類和Semaphore類功能相似,都是用於控制多線程對指定資源的訪問,但SemaphoreSlim的性能要稍好一些,個人推薦使用SemaphoreSlim;

SemaphoreSlim類可以用於控制有多少個線程可以進入指定的代碼,它的構造函數SemaphoreSlim(int initialCount)用於設置線程的數量,Wait()方法用於阻塞其中多余數量(例如代碼中的3個線程)的線程,當線程數量在允許的范圍內時此線程可以進入指定的代碼,否則不能進入;Release()方法用於當線程執行完后釋放資源,釋放后下一個線程則可以進入此部分的代碼;

 

以下代碼是它的常用使用方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace _Console
{
    class Program
    {
        static void Main(string[] args)
        {
            Test();
            Console.ReadKey();
        }
        private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(3);
        public static void Test()
        {
            for (int i = 0; i < 8; i++)
            {
                new Thread(Go).Start(i);
            }
        }
        public static void Go(object i)
        {
            Console.WriteLine($"{i} 准備進入 !");
            semaphoreSlim.Wait();
            Console.WriteLine($"{i} 已進入 !");
            Thread.Sleep(1000);
            Console.WriteLine($"{i} 離開 !");
            semaphoreSlim.Release();
        }
    }
}

  下面是運行的可能結果(因為線程的控制具有不確定性):

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM