static未央

博客园 首页 新随笔 联系 订阅 管理

2011年12月21日 #

摘要: 在上一讲介绍了使用lock来实现线程之间的同步。实际上,这个lock是C#的一个障眼法,在C#编译器编译lock语句时,将其编译成了调用Monitor类。先看看下面的C#源代码:publicstaticvoidMyLock(){lock(typeof(Program)){}}复制代码 上面的代码通过lock语句使MyLock同步,这个方法被编译成IL后,代码如图1所示。 图1 从上图被标注的区域可以看到,一条lock语句被编译成了调用Monitor的Enter和Exit方法。Monitor在System.Threading命名空间中。lock的功能就相当于直接调用Monitor的Entry方. 阅读全文
posted @ 2011-12-21 00:35 abstract未央 阅读(272) 评论(0) 推荐(0)

摘要: 虽然线程可以在一定程度上提高程序运行的效率,但也会产生一些副作用。让我们先看看如下的代码:classIncrement{privateintn=0;privateintmax;publicIncrement(intmax){this.max=max;}publicintresult{get{returnn;}set{n=value;}}publicvoidInc(){for(inti=0;i<max;i++){n++;}}}classProgram{publicstaticvoidMain(){Incrementinc=newIncrement(10000);Thread[]thread 阅读全文
posted @ 2011-12-21 00:27 abstract未央 阅读(272) 评论(0) 推荐(0)

摘要: 如果设计一个服务器程序,每当处理用户请求时,都开始一个线程,将会在一定程序上消耗服务器的资源。为此,一个最好的解决方法就是在服务器启动之前,事先创建一些线程对象,然后,当处理客户端请求时,就从这些建好的线程中获得线程对象,并处理请求。保存这些线程对象的结构就叫做线程池。 在C#中可以通过System.Threading.ThreadPool类来实现,在默认情况下,ThreadPool最大可建立500个工作线程和1000个I/O线程(根据机器CPU个数和.net framework版本的不同,这些数据可能会有变化)。下面是一个用C#从线程池获得线程的例子:privatestaticvoidex. 阅读全文
posted @ 2011-12-21 00:25 abstract未央 阅读(411) 评论(0) 推荐(0)

摘要: 一、 Thread类的基本用法通过System.Threading.Thread类可以开始新的线程,并在线程堆栈中运行静态或实例方法。可以通过Thread类的的构造方法传递一个无参数,并且不返回值(返回void)的委托(ThreadStart),这个委托的定义如下:[ComVisibleAttribute(true)]public delegate void ThreadStart()我们可以通过如下的方法来建立并运行一个线程。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingS 阅读全文
posted @ 2011-12-21 00:13 abstract未央 阅读(257) 评论(0) 推荐(0)