zoukankan      html  css  js  c++  java
  • 信号量-Semaphore、SemaphoreSlim

    核心类:Semaphore,通过int数值来控制线程个数。

      * 通过观察构造函数 public Semaphore(int initialCount, int maximumCount);:

      * initialCount: 可以同时授予的信号量的初始请求数。

      * maximumCount: 可以同时授予的信号量的最大请求数。

    核心方法:WaitOne和Release

    复制代码
    static Semaphore seLock = new Semaphore(1, 1); //只允许一个线程通过 
    {
    seLock.WaitOne();
    Console.WriteLine(num2++);
    seLock.Release();
    }
    复制代码

    SemaphoreSlim:

    轻量级的信号量实现SemaphoreSlim,其不但能够更加高效的实现信号量的功能,还提供了一个异步等待的API。

    Demo:异步执行不阻塞主线程

    复制代码
            //同步执行
            static void SemphoreTest()
            {
                Task[] tasks = new Task[10];
                for (int i = 0; i < 10; i++)
                {
                    semaphore.Wait();
                    //模拟做事情况
                    Console.WriteLine("excute");
                    Thread.Sleep(1000);
                    semaphore.Release();
                }
                for (int i = 0; i < 10; i++)
                {
                    Thread.Sleep(1000);
                    Console.WriteLine("------");
                }
            }
    //异步执行 static void SemphoreTestAsync() { Task[] tasks = new Task[10]; for (int i = 0; i < 10; i++) { tasks[i] = Task.Run(async () => { await semaphore.WaitAsync(); //模拟做事情况 Console.WriteLine("excute"); Thread.Sleep(1000); semaphore.Release(); }); } for (int i = 0; i < 10; i++) { Thread.Sleep(1000); Console.WriteLine("------"); } Task.WaitAll(tasks); }
    复制代码
  • 相关阅读:
    HTML5中input输入框的种类
    perl mojo 编码
    perl encode_utf8 decode_utf8
    perl mojo use utf8 和no utf8
    perl unload oracle gbk
    perl unload Oracle utf8 数据库
    perl socket 返回发送成功数据的长度
    perl socket 客户端发送消息
    验证码识别(Tess4J初体验)
    Uploadify 3.2 参数属性、事件、方法函数详解
  • 原文地址:https://www.cnblogs.com/bruce1992/p/14348914.html
Copyright © 2011-2022 走看看