ManualResetEvent

一句话解释ManualResetEvent其实就相当于多线程中的一个门。
详细解释:比如你在听着歌码着代码,这可以看做是两个线程并行,这时候你遇到了一个复杂的问题,你敲代码的线程就得告诉听歌的线程说:歌先关一下,我专心敲个代码,等到这个问题解决了,敲代码的线程又告诉听歌的线程说,来来来,继续听歌。那ManualResetEvent其实就是做这个事情的。
我们看一下怎么用:private ManualResetEvent _mer = new ManualResetEvent(true) 这是定义,定义一个门,给门一个初始值,true是门开的,false是门关的。
第二步:在听歌的线程这里,设置一个门
{
//听歌线程的实现
_mer.WaitOne();
}
WaitOne就是设置一个门。
第三步:控制开关门  _mer.Set();开门   _mer.Reset() 关门
当门是开的,程序就能通过waitone这个门,如果门是关的,程序就在门那里等待

它可以通知一个或多个正在等待的线程已发生事件,允许线程通过发信号互相通信,来控制线程是否可心访问资源

当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时,它调用 Reset 以将 ManualResetEvent 置于非终止状态。此线程可被视为控制 ManualResetEvent。调用 ManualResetEvent 上的WaitOne 的线程将阻止,并等待信号。当控制线程完成活动时,它调用 Set 以发出等待线程可以继续进行的信号。并释放所有等待线程。

当初始化为true时,为终止状态。终止状态时WaitOne()允许线程访问下边的语句

当初始化为false时,为非终止状态。非终止状态时WaitOne()阻塞线程,不允许线程访问下边的语句

猜你喜欢

转载自www.cnblogs.com/Yusen-Chi/p/10297374.html
今日推荐