【问题标题】:Does queuing threads impact non-thread safe objects in the same class?排队线程是否会影响同一类中的非线程安全对象?
【发布时间】:2009-05-07 13:38:10
【问题描述】:
如果我使用 ThreadPool.QueueUserWorkItem 生成一个线程并且该线程没有引用非线程安全的对象,它会损害该非线程安全的对象吗?
[编辑]
我所说的非线程安全对象是指可编程逻辑控制器的第三方接口,它无法打开同时连接或并发支持。
我想我只是想确保通过在与我对该对象的引用相同的类中排队线程,我不会以某种我没有意识到的方式损害它的线程安全性。
【问题讨论】:
标签:
c#
.net
vb.net
multithreading
clr
【解决方案1】:
线程并不神奇。如果他们不引用某些数据,那么他们就不会影响它。
编辑:如果您有监控新线程的创建和监控 QueueUserWorkItem 的代码,并且如果监控器修改了这些非线程安全对象,那么是的,会有影响。
否则,不。
【解决方案2】:
只要新线程不直接或间接引用非线程安全对象,就不会对其产生影响。
小技术点。调用 ThreadPool.QueueUserWorkItem 不一定会产生一个新线程。相反,它确保提供的委托将在不同的线程上运行。这可能会导致创建线程,或者更可能的情况是它将使用已分配给线程池的现有线程。