在 .Set 之后直接在 EventWaitHandle 上调用 .Close (.Dispose) 是否安全?
Is it safe to call .Close (.Dispose) on an EventWaitHandle directly after .Set?
我有一个线程在等待 EventWaitHandle (AutoResetEvent):
AutoResetEvent.WaitOne();
我有另一个线程通知第一个线程继续
AutoResetEvent.Set();
AutoResetEvent.Close();
在.Set 之后直接调用.Close 是否安全,换句话说,是否可以保证在处理AutoResetEvent 之前等待线程已经继续?
是的,如果事情完全按照您问题中的描述进行,那是安全的。如果您 知道 在您调用 set 时所有线程都已经在等待,这些线程将被通知并且一切都会好起来,因为所有等待的线程都保证在调用之前被释放设置 returns.
但是,如果您出于某种原因遇到竞争并在 线程开始等待之前调用设置和关闭,您将在尝试等待时遇到异常。所以在实践中你最好避免这种模式。恕我直言
我有一个线程在等待 EventWaitHandle (AutoResetEvent):
AutoResetEvent.WaitOne();
我有另一个线程通知第一个线程继续
AutoResetEvent.Set();
AutoResetEvent.Close();
在.Set 之后直接调用.Close 是否安全,换句话说,是否可以保证在处理AutoResetEvent 之前等待线程已经继续?
是的,如果事情完全按照您问题中的描述进行,那是安全的。如果您 知道 在您调用 set 时所有线程都已经在等待,这些线程将被通知并且一切都会好起来,因为所有等待的线程都保证在调用之前被释放设置 returns.
但是,如果您出于某种原因遇到竞争并在 线程开始等待之前调用设置和关闭,您将在尝试等待时遇到异常。所以在实践中你最好避免这种模式。恕我直言