簡單介紹:
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();
}
}
}
下面是運行的可能結果(因為線程的控制具有不確定性):

