1、WaitHandle类是个抽象类,有方法:WaitOne()、WaitAll()、WaitAny(), 功能实现由其子类完成。
2、互斥同步对象Mutex,派生自WaitHandle类,有两个状态:onwed、unowned。
private Mutex m = new Mutex();
public void DoSomething()
{
m.WaitOne();
//....
m.ReleaseMutex();
}
3、Semaphore类 管理多个共享资源(派生自WaitHandle类)
Semaphore可以同步多个线程对同一种类型多个共享资源访问。如果系统中拥有多中不同类型的资源,则可以创建多个Semaphore对象。
Mutex类是Semaphore的特殊情况,即资源数为1。
Semaphore类的构造函数:
public Semaphore (int initialCount, int maximumCount)
initialCount 表示目前剩余资源数
maximumCount 表示总资源数
示例:
private const int ComputerNum = 3;
private Semaphore sp = new Semaphore(ComputerNum , ComputerNum);
public void DoSomeThing()
{
sp.WaitOne(); //资源数自动减一
//.....
sp.Release(); //资源数自动加一
}
多个线程同时执行,只要可用资源数>0
4、EventWaitHandle类,等待时间的发生
(1)ManualResetEvent类, xx.Set()时,允许一批线程运行。
(2)AutoResetEvent类, xx.Reset()时,允许线程阻塞队列里的一个线程运行。
示例1:
private static ManualResetEvent mre = new ManualResetEvent(false); //初始为“红灯” private static void ThreadProc() { string name = Thread.CurrentThread.Name; Console.WriteLine(name + " starts and calls mre.WaitOne()"); mre.WaitOne(); Console.WriteLine(name + " ends."); } private static void Go() { mre.Set(); } private static void Stop() { mre.Reset(); }