多線程小記,線程控制併發

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

適合大量線程作相同事情的適合來控制併發,蠻有用的函數

相關文章
相關標籤/搜索