MyException - 我的异常网
当前位置:我的异常网» C# » 多线程控制有关问题,待

多线程控制有关问题,待(2)

www.MyException.Cn  网友分享于:2013-12-30  浏览:17次

Interlocked.Decrement(ref poolFlag) ;
}
}
------解决方案--------------------
up2u
------解决方案--------------------
lovelacy的做法可取,唯一要注意的是Run部分。
public static void Run()
...{

muxConsole.WaitOne(); //阻塞队列
Interlocked.Increment(ref poolFlag) ; //标记+1
if (poolFlag != maxThread) //判断是否等于上限
muxConsole.ReleaseMutex(); //如果此线程达不到可执行线程上限,则继续开通,让后面的线程进来

// =================前面都没问题========================
try
{
Console.WriteLine( "{0} 正在运行......\n ", Thread.CurrentThread.Name ) ;
Thread.Sleep( 5000 ); //模拟执行
Console.WriteLine( "{0} 已经中止......\n ", Thread.CurrentThread.Name ) ;
}
finally
{
//标记-1
Interlocked.Decrement(ref poolFlag) ;
}
// ================== 最好用try的语法 =========================
}
}
================================================================
用try的原因是因为你不确定程序是不是会发生错误。如果有Interlocked.Decrement(ref poolFlag)之前有Exception发生,线程就会被终止,而标记却不会被减下来。这样最终结果就是线程池枯竭。
------解决方案--------------------
http://www.microsoft.com/china/MSDN/library/netFramework/netframework/NECLRT.mspx
------解决方案--------------------
强贴留名阿 以后要学习
------解决方案--------------------
最好先看看这篇文章
http://www.microsoft.com/china/MSDN/library/netFramework/netframework/NECLRT.mspx

------解决方案--------------------
其实尽量不应该在循环里面有线程。

线程池不可以吗?

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有