我有两个ManualResetEvents,我用它来在两个线程之间来回传递控制权。本质上是一个协程。如果我调用WaitHandle.Dispose(),等待线程会发生什么?
因为协程持有一次性对象(ManualResetEvents是等待句柄),它应该实现一次性。另外,它应该在处理这些ManualResetEvents时处置它们。但是,由于一次只运行一个线程,其中一个线程几乎总是等待其中一个句柄。
如果我处置两个ManualResetEvents,那么指定的行为是什么?等待的线程会永久卡住,还是会处置终止等待?如果我先调用Set(),该怎么办?
我已经知道线程可以安全地处理。问题实际上是在执行处置。我需要保证没有线程死锁。 – 2009-08-17 15:11:38
当您使用事件时处理事件的方式会在不同平台或不同负载的CPU上授予不可预知的行为。但应用正确的模式解决了这个问题 - 不要处置事件,而存在使用它的可能性。 – Dewfy 2009-08-17 15:57:46