从多个线程调用ManualResetEventSlim.Reset

时间:2019-04-01 13:56:07

标签: c# multithreading

调用ManualResetEventSlim.Reset()是否是线程安全的(不是从WaitHandle)进行调用,还是我需要做些类似的事情

lock(mutex)
{
   if (myManualResetEvent.IsSet)
   {
      myManualResetEvent.Reset();
   }
}

根据ManualResetEventSlim class上的文档,我不了解的部分是:

“ ManualResetEventSlim的所有公共成员和受保护成员都是线程安全的,并且可以从多个线程中同时使用,但Dispose除外,后者必须仅在ManualResetEventSlim上的所有其他操作都已完成并重置后才能使用,仅当没有其他线程正在访问该事件时才使用。”

另一方面,Reset() method的文档指出:

“可以与除WaitHandle之外的所有成员同时调用重置。”

我感兴趣的是,如果线程A首先调用myManualResetEventSlim.Reset(),然后在线程A调用Set()之前,线程B再次调用Reset(),然后线程B发生了什么呢?调用Set(),然后调用线程A调用Set()

这是否有效,并且仅等同于线程A调用Reset(),随后是线程B调用Set()(用于早期信令)?

0 个答案:

没有答案