我有一个程序,其中涉及在一个线程上从网络接收数据包,然后通知其他线程该数据包已收到。我当前的方法使用Thread.Interrupt,在传输大量数据时似乎有点慢。使用“锁定”来避免使用多个中断会更快吗,或者锁定实际上只是在其实现中调用Interrupt()?

最佳答案

我不明白为什么您会使用Thread.Interrupt而不是一些更传统的信令方法来通知等待线程已接收到数据。 Thread.Interrupt无论如何都要求目标线程处于等待状态,那么为什么不添加一个可以向目标线程的等待逻辑发出信号的对象,并使用该对象将其踢入新数据呢?
lock用于保护关键代码或数据免于其他线程执行,不适用于线程间 Activity 信令的机制。

在合适的对象上使用WaitOneWaitAll而不是二者之一。 .Net 4中的System.Collections.Concurrent还提供了极好的方法来将新数据排队到目标线程的队列中,并提供了解决问题的其他可能方法。

10-04 13:20