上一节主要介绍了使用锁进行同步,本节主要介绍使用信号量进行同步使用EventWaitHandle信号量进行同步EventWaitHandle主要用于实现信号灯机制。信号灯主要用于通知等待的线程。主要有两种实现:AutoResetEvent和ManualResetEvent。Aut ...
上一节主要介绍了使用锁进行同步,本节主要介绍使用信号量进行同步
使用EventWaitHandle信号量进行同步
EventWaitHandle主要用于实现信号灯机制。信号灯主要用于通知等待的get='_blank'>线程。主要有两种实现:AutoResetEvent和ManualResetEvent。
AutoResetEvent
AutoResetEvent从字面上理解是一个自动重置的时间。举个例子,假设有很多人等在门外,AutoResetEvent更像一个十字旋转门,每一次只允许一个人进入,进入之后门仍然是关闭状态。
下面的例子演示了使用方式:
using System;using System.Threading;class BasicWaitHandle{ static EventWaitHandle _waitHandle = new AutoResetEvent(false); static void Main() { for (int i = 0; i < 3; i++) new Thread(Waiter).Start(); for (int i = 0; i < 3; i++) { Thread.Sleep(1000); // Pause for a second... Console.WriteLine("通知下一个线程进入"); _waitHandle.Set(); // Wake up the Waiter. } Console.ReadLine(); } static void Waiter() { var threadId = Thread.CurrentThread.ManagedThreadId; Console.WriteLine("线程 {0} 正在等待", threadId); _waitHandle.WaitOne(); // 等待通知 Console.WriteLine("线程 {0} 得到通知,可以进入", threadId); }}
原标题:细说.NET中的多线程 (五 使用信号量进行同步)
关键词:.NET
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。