A_04 使用SemaphoreSlim类控制并发访问的线程数量

 SemaphoreSlim 类

官方描述:对可同时访问资源或资源池的线程数加以限制的 Semaphore 的轻量替代。自我理科:通过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();
                    }
                });
            }
        }

测试结果

 

 

 

备注

信号量分为两种类型:本地信号量和命名系统信号量。 本地信号灯对应用程序而言是本地的,系统信号量在整个操作系统中均可见,适用于进程间同步。SemaphoreSlim是属于本地信号量

 

posted @ 2021-07-27 21:38  旭日阳光/hjw  阅读(90)  评论(0)    收藏  举报