• 信号量-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); }
    复制代码
  • 相关阅读:
    Unity Shader 之 渲染流水线
    C# 如何快速取到enum中的枚举数量
    Unity NGUI ScrollView 苹果式滑动
    多元线性回归~ML
    梯度下降~ML
    代价函数~ML
    ML~线性代数~python
    unity 大游戏使用什么框架
    C# Activator.CreateInstance()方法使用
    VSync Count 垂直同步
  • 原文地址:https://www.cnblogs.com/bruce1992/p/14348914.html
Copyright © 2020-2023  润新知