大家好,又见面了,我是你们的朋友全栈君。
今天详细说一下ManualResetEvent
它可以通知一个或多个正在等待的线程已发生事件,允许线程通过发信号互相通信,来控制线程是否可心访问资源
Reset 以将 ManualResetEvent 置于非终止状态。ManualResetEvent。ManualResetEvent 上的 WaitOne 的线程将阻止,并等待信号。Set 以发出等待线程可以继续进行的信号。并释放所有等待线程。
ManualResetEvent 将保持终止状态,直到它被手动重置。WaitOne 的调用将立即返回。
ManualResetEventDemo.rar
ManualResetEvent 的初始状态,如果初始状态处于终止状态,为 true;否则为 false。
代码语言:javascript复制 class Program
{
static ManualResetEvent _mre = new ManualResetEvent(false);
static void Main(string[] args)
{
Thread[] _threads = new Thread[3];
for (int i = 0; i < _threads.Count(); i )
{
_threads[i] = new Thread(ThreadRun);
_threads[i].Start();
}
}
static void ThreadRun()
{
int _threadID = 0;
while (true)
{
_mre.WaitOne();
_threadID = Thread.CurrentThread.ManagedThreadId;
Console.WriteLine("current Tread is " _threadID);
Thread.Sleep(TimeSpan.FromSeconds(2));
}
}
}