摘要: 在讨论WaitHandle类之前 我们先看一张MSDN上给的继承关系图: 红色框指出的部分,就是这篇文章要讨论的WaitHandle类,绿色框指出的部分就是本文提到的一些异步对象。可以看到,异步对象的父类就是WaitHandle异步对象如AutoResetEvent和ManualResetEvent定义了一种信号机制,这种机制用来表明是访问共享资源还是释放共享资源。1. WaitHanle类MSD... 阅读全文
posted @ 2010-10-21 16:56 m苗子 阅读(3275) 评论(2) 推荐(0) 编辑
摘要: AutoResetEvent也是一个同步对象,它用于对资源的独占访问。当AutoResetEvent处于终止状态时,如果存在等待的线程,则在该线程执行后,AutoResetEvent变量将自动变为非终止状态。代码示例:代码代码中,我们关注AutoResetEvent同步对象。从代码中我们可以看到 CalFirst、CalSec、CalThird方法中 都有一句AutoEvents[].Set()代... 阅读全文
posted @ 2010-10-21 16:42 m苗子 阅读(491) 评论(0) 推荐(0) 编辑
摘要: ManualResetEvent 用于线程同步,通知一个或多个线程某事件已经发生。通常用于一个线程执行的任务必须在其他线程的任务执行之前完成。ManualResetEvent状态分为两种:终止状态和非终止状态。当某一任务完成时,将ManualResetEvent设置为终止状态,这样其他等待的线程(一个或多个)将开始执行自己的任务。注意:一旦它被终止,它将保持终止状态,直到它被手动重置。代码示例:代... 阅读全文
posted @ 2010-10-21 16:23 m苗子 阅读(790) 评论(0) 推荐(1) 编辑
摘要: 1.线程池,顾名思义,就是装着若干个线程的池子。2.出现理由 可以更为有效的使用线程。 如何理解这个“有效”? (1)我们知道线程在使用之前一般是处于休眠状态的,这样浪费了大量资源创建它,但是却没有使用它,真的是浪费资源。(2)使用线程时,线程之间的切换也会浪费大量资源。而线程池,就是为了避免上述两个问题,从而更为有效的利用资源来完成线程之间的调度进而完成工作。3.线程池工... 阅读全文
posted @ 2010-10-21 14:51 m苗子 阅读(678) 评论(0) 推荐(0) 编辑
摘要: 线程这一概念,可以理解成进程中的一个小单元。这个单元是一个独立的执行单元,但是与进程中的其他线程共享进程中的内存单元。由于Cpu资源是有限的,所以进程中的多个线程要抢占Cpu,这也导致进程中的多个线程交替执行。Thread.Sleep() 本身的含义是当前线程挂起一定时间。Thread.Sleep(0) MSDN上的解释是挂起此线程能使其他等待线程执行。这样的解释容易导致误解,我们可以这样理解,其... 阅读全文
posted @ 2010-10-21 10:21 m苗子 阅读(14147) 评论(0) 推荐(4) 编辑