CLR via C# 读书笔记 3-2 AutoResetEvent ManualResetEvent 和Semaphore
2010-11-18 14:29
531 查看
这三个对象都经常用于线程同步
下面是一些他们的异同点
1.当多个线程在等待一个 AutoResetEvent的时候,每次调用AutoResetEvent.Set()方法只会唤醒一个线程
2.当多个线程在等待一个ManualResetEvent的时候,每次调用ManualResetEvent.Set()方法会唤醒所有等待的线程
3.当多个线程在等待一个Semaphore的时候,每次调用Semaphore.Release(Int releaseCount)的时候 将唤醒releaseCount个线程
如果调用的是Semaphore.Release() 那么相当于Semaphore.Release(1);
4.AutoResetEvent可以多次调用 Set方法,而Semaphore在每次被调用Release方法的时候会计数,如果这个数字超过了最大限制 ,那么会抛出一个SemaphoreFullException(最大数值可以在构造函数中确定 maximumCount)
下面是一些他们的异同点
1.当多个线程在等待一个 AutoResetEvent的时候,每次调用AutoResetEvent.Set()方法只会唤醒一个线程
2.当多个线程在等待一个ManualResetEvent的时候,每次调用ManualResetEvent.Set()方法会唤醒所有等待的线程
3.当多个线程在等待一个Semaphore的时候,每次调用Semaphore.Release(Int releaseCount)的时候 将唤醒releaseCount个线程
如果调用的是Semaphore.Release() 那么相当于Semaphore.Release(1);
4.AutoResetEvent可以多次调用 Set方法,而Semaphore在每次被调用Release方法的时候会计数,如果这个数字超过了最大限制 ,那么会抛出一个SemaphoreFullException(最大数值可以在构造函数中确定 maximumCount)
using System; using System.Threading; public sealed class Semaphore : WaitHandle { public Semaphore(Int32 initialCount, Int32 maximumCount); public Int32 Release(); // Calls Release(1); returns previous count public Int32 Release(Int32 releaseCount); // Returns previous count }
相关文章推荐
- CLR via C# 读书笔记 5-1 何时对托管资源使用Finalize
- 《CLR via C#》读书笔记(3) -- .Net程序的运行模型 下
- CLR via C# 读书笔记(四).net平台对象在托管堆上的内存分配
- CLR via C# 读书笔记 6-1 AppDomain(应用程序域)
- 《CLR via C#》读书笔记 之 委托
- CLR via C# 3 读书笔记(6):第1章 CLR执行模型 — 1.6 框架类库
- 《CLR via C#:框架设计》读书笔记 - 类型基础
- CLR via C# 线程基础知识读书笔记
- 读书笔记—CLR via C#线程25-26章节
- 《CLR via C#》读书笔记
- CLR via C# 读书笔记 6-3 跨域访问的性能问题
- 《CLR via C#》读书笔记-线程同步(一)
- 《CLR via C#》读书笔记---11事件
- CLR via C# 3 读书笔记(5):第1章 CLR执行模型 — 1.5 本地代码生成器工具:NGen.exe
- 关于.NET(C#)中字符型(Char)与数字类型的转换, CLR via c# 读书笔记
- [读书笔记]参数out和ref-CLR via C# edition3
- CLR via C# 读书笔记 3-6 比较APM和EAP(异步编程模型和基于事件的编程模式)
- CLR via C# 读书笔记 6-2 不同AppDomain之间的通信 z
- CLR via C# 读书笔记 4-2 线程和锁的一些使用原则
- CLR via C# 读书笔记2-4