摘要: 在上一讲介绍了使用lock来实现线程之间的同步。实际上,这个lock是C#的一个障眼法,在C#编译器编译lock语句时,将其编译成了调用Monitor类。先看看下面的C#源代码:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->publicstaticvoidMyLock(){lock(typeof(Program)){}} 上面的代码通过lock语句使MyLock同步,这个方法被编译成IL后,代码如图1所示。 图1 从上图被标注的区域可以看到 阅读全文
posted @ 2011-07-25 15:23 走路到纽约 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 虽然线程可以在一定程度上提高程序运行的效率,但也会产生一些副作用。让我们先看看如下的代码:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->classIncrement{privateintn=0;privateintmax;publicIncrement(intmax){this.max=max;}publicintresult{get{returnn;}set{n=value;}}publicvoidInc(){for(inti=0;i&l 阅读全文
posted @ 2011-07-25 14:47 走路到纽约 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 如果设计一个服务器程序,每当处理用户请求时,都开始一个线程,将会在一定程序上消耗服务器的资源。为此,一个最好的解决方法就是在服务器启动之前,事先创建一些线程对象,然后,当处理客户端请求时,就从这些建好的线程中获得线程对象,并处理请求。保存这些线程对象的结构就叫做线程池。 在C#中可以通过System.Threading.ThreadPool类来实现,在默认情况下,ThreadPool最大可建立500个工作线程和1000个I/O线程(根据机器CPU个数和.net framework版本的不同,这些数据可能会有变化)。下面是一个用C#从线程池获得线程的例子:Code highlighting pr 阅读全文
posted @ 2011-07-25 14:01 走路到纽约 阅读(284) 评论(0) 推荐(0) 编辑