• 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的作用了。

    from:https://zhuanlan.zhihu.com/p/158777952

  • 相关阅读:
    Python try/except/finally
    EmailMessage类
    HTML DOM 初学笔记
    JavaScript 初学备忘录
    html style标签
    Django 导出csv文件 中文乱码问题
    Html 列表实现展开和收起
    Django CreateView 简单使用
    Django用户认证
    Nginx负载均衡配置实例详解
  • 原文地址:https://www.cnblogs.com/liuqiyun/p/16399673.html
Copyright © 2020-2023  润新知