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); }
    复制代码
  • 相关阅读:
    【SDOI2014】数表
    【洛谷P4735】最大异或和
    FFT学习笔记
    【SHOI2008】堵塞的交通
    HDU 1754 I Hate It 线段树
    hdu 1166 敌兵布阵 ( 线段树或者树状数组)
    hdu 5339 Untitled dfs
    The mook jong
    hdu 5363 Key Set 快速幂
    HDU 1983 Kaitou Kid
  • 原文地址:https://www.cnblogs.com/bruce1992/p/14348914.html
Copyright © 2011-2022 走看看