调用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()
?
Reset()
,随后是线程B调用Set()
(用于早期信令)?