多線程的使用非常普遍,有了多線程就必然提到鎖的概念。鎖區(qū)域的代碼塊只允許一個線程進入萝究。還有一種信號量SemaphoreSlim 的用法,能夠支持指定多個線程進入锉罐。這里特意記錄一下帆竹。
static readonly SemaphoreSlim slim = new SemaphoreSlim(2);
static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
ThreadPool.QueueUserWorkItem(Test, i);
}
Console.ReadLine();
}
private async static void Test(object i)
{
Console.WriteLine("準備執(zhí)行" + i);
await slim.WaitAsync();
Console.WriteLine("開始執(zhí)行" + i);
//todo other
await Task.Delay(1000);
Console.WriteLine("執(zhí)行結束" + i);
slim.Release();
}
運行結果可以看到“開始執(zhí)行”只會有兩個并存。
image.png