您的位置:首页 > 编程语言 > C#

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)

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
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: