我想知道如何在运行时安全地更改线程应该等待的EventWaitHandle。如何在运行时替换WaitHandle线程应该等待
假设有两个线程(A和C)通过EventWaitHandles同步。 A循环执行其工作,并且C等待,直到它从A收到通知它可以开始执行其工作(例如通过AutoResetEvent)。这种模式是ACAC的...
后来一个新的线程(B)启动(例如通过用户操作),它的工作应该在两个先前的线程之间以这种方式执行:A完成它的工作,然后发出信号B并且一旦B完成它的信号C.现在的模式是ABCABC ...
因此,在线程C正在等待与A共享的EventWaitHandle并且稍后应该有一个安全机制使得C在另一个EventWaitHandle上等待共享B.在我看来,棘手的部分是替换C使用的EventWaitHandle,因为一旦完成,我应该很容易启动B,它将使用EventWaitHandle等待A作业和EventWaitHandle发送C作业信号。该机制还应该提供一种方法来安全地卸载线程B并返回到只有线程A和C正在工作的初始状态。
有没有一种安全的方法来完成这与EventWaitHandle?如果没有,任何其他建议,将不胜感激。
如果您使用的是.NET 4.0,那么使用任务将会使这个更简单。从本质上讲,你有三个任务,A“继续”B和B“继续”C“。在没有任何事情要做的情况下,B本质上什么都不做,但是当有时候会做某事。而不是试图从混音中“插入”和“删除”B,它可能/应该始终处于混音中。这将使这一切都变得难以维持。 – 2011-02-18 10:34:39