zoukankan      html  css  js  c++  java
  • 多线程小记,线程控制并发

    private AutoResetEvent exitEvent;
    private void ProcessA()
    {
       while (true)
       {
           Console.WriteLine("do some thing");
           if (exitEvent.WaitOne(waitTime))
           {
           break;
         }
       }
      Console.WriteLine("exit");
    }
    exitEvent.Set();
    private void ProcessB()
    {
       while (true)
       {
           Console.WriteLine("do some thing");
          Thread.Sleep(waitTime)
       }
    }

    关于线程小模型,出现两个处理的函数,一个是简单的Sleep等待,一个是信号量,但是都有一个缺陷,就是不管是那个都在执行的时候(do some thing)无法退出。信号量好一些,在等待的时候可以控制退出,Sleep的话只能引发Exception来退出(或者在While设置flag,但是也一样)。

     public SemaphoreSlim semaphoreSlim = new SemaphoreSlim(10);//并发限制为10

    在多线程的模型里可以控制线程数量来控制并发

    semaphoreSlim.Wait();
    ThreadPool.QueueUserWorkItem(t => {
       Console.WriteLine("do some thing");
      semaphoreSlim.Release();
    });

    适合大量线程做相同事情的适合来控制并发,蛮有用的

  • 相关阅读:
    DataTable Clone()方法和Copy()方法的区别
    element-ui的使用
    解决VS Code 软件PowerShell执行策略问题
    Vue-Router
    Vue的生命周期
    vue-cli脚手架和webpack
    Vue组件
    Vue基本用法和指令
    ES6常用语法
    前端-Bootstrap框架
  • 原文地址:https://www.cnblogs.com/RainbowInTheSky/p/9472342.html
Copyright © 2011-2022 走看看