3

我有一个线程在 EventWaitHandle (AutoResetEvent) 上等待:

AutoResetEvent.WaitOne();

我有另一个线程指示第一个线程继续

AutoResetEvent.Set();
AutoResetEvent.Close();

在 .Set 之后直接调用 .Close 是否安全,换句话说,是否可以保证在 AutoResetEvent 被释放之前等待线程已经继续?

4

1 回答 1

2

是的,如果事情完全按照您的问题中的描述进行,那是安全的。如果您知道在调用 set 时所有线程都在等待,那么这些线程将收到信号并且一切都会好起来,因为所有等待的线程都保证在 set 调用返回之前被释放。

但是,如果您由于某种原因在线程开始等待之前遇到竞争并调用 set 和 close ,您将在尝试等待时遇到异常。所以在实践中你最好避免这种模式。恕我直言

于 2015-11-23T12:25:11.593 回答