C# 多線程——SemaphoreSlim的使用


// 現在有10個人要過橋
// 但是一座橋上只能承受5個人,再多橋就會塌
public static void SemaphoreTest()
{
    var semaphore = new SemaphoreSlim(5);
    for (int i = 1; i <= 10; i++)
    {
        Thread.Sleep(100); // 排隊上橋
        var index = i; // 定義index 避免出現閉包的問題
        Task.Run(() =>
        {
            semaphore.Wait();
            try
            {
                Console.WriteLine($"第{index}個人正在過橋。");
                Thread.Sleep(5000); // 模擬過橋需要花費的時間
            }
            finally
            {
                Console.WriteLine($"第{index}個人已經過橋。");
                semaphore.Release();
            }
        });
    }
}

 

運行SemaphoreTest方法,得到如下的輸出。

如代碼中的注釋,可以知道SemaphoreSlim類的作用就是控制訪問某資源的線程數量。

代碼示例中的資源就是橋,線程就是過橋的人。10個人要過橋,代表10個進程要訪問資源。但是橋是有承受限制的,所以要控制過橋上人的數量,就必須有人要等待。

通過代碼結合輸出信息就能理解SemaphoreSlim的作用了。


免責聲明!

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



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