我有一个程序,涉及在一个线程上从网络接收数据包,然后通知其他线程已收到该数据包。我当前的方法使用Thread.Interrupt,在传输大量数据时似乎有点慢。使用“锁”来避免使用许多中断是否会更快,或者锁实际上只是在其实现中调用 Interrupt() ?
最佳答案
我不明白为什么您要使用Thread.Interrupt
而不是一些更传统的信号方法来通知等待线程已收到数据。 Thread.Interrupt 无论如何都要求目标线程处于等待状态,那么为什么不添加一个可以向目标线程的等待逻辑发出信号的对象,并使用它来启动新数据呢?
lock
用于保护关键代码或数据不被其他线程执行,并且不适合作为线程间事件信号发送的机制。
在合适的对象上使用 WaitOne
或 WaitAll
而不是其中之一。 .Net 4 中的 System.Collections.Concurrent
还提供了将新数据排队到目标线程的 pol 中的出色方法,以及解决问题的其他可能方法。
关于c# - lock 和 Thread.Interrupt 哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6294268/