QQ交流群:110826636

多线程小记,线程控制并发

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();
});

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

posted @ 2018-08-14 08:24  FourOne  阅读(217)  评论(0编辑  收藏