if (poolFlag !=maxThread)
改为if (poolFlag <maxThread) 试试

解决方案 »

  1.   

    因为 maxThread = 3
    所以 第3个线程执行:if (poolFlag !=maxThread) 判断后,未执行muxConsole.ReleaseMutex();   
    注意:此期间, 第4个线程,在muxConsole.WaitOne();  处挂起  
    然后 继续下面的,直到Interlocked.Decrement(ref poolFlag) ; 后 返回,
    由于线程3一直未muxConsole.ReleaseMutex,导致系统回收线程资源时,认定线程3 AbandoneMutex(muxConsole)
    此时  挂起的第4个线程catch到AbandoneMutexException
      

  2.   

    这样写是错误的,还不如直接用线程池:ThreadPool.SetMaxThreads(3,3);//设置线程池的最大线程数和异步时的最大线程数
    ThreadPool.QueueUserWorkItem(new WaitCallback(run));
    这样和你想要的效果是一样的