2010-01-19 187 views
0

我有一个对象列表, 为每个对象我想运行一个完全独立的线程(线程安全),就像....我会在while循环中从我的列表中选择一个对象并运行一个线程然后为下一个对象运行下一个线程...所有线程都应该同步,以便它们共享的资源(值/连接(关闭/打开))不应该改变.....线程同步

+1

有问题吗? – 2010-01-19 06:59:31

回答

2

启动线程对象不一定明智;您应该有少量工作线程从列表中选取项目(或更好,Queue<T>),同步对列表/队列的访问。线程安全队列的一个例子可以在this thread中找到。

一旦你有一个工作项目,没有神奇的子弹让你编写的其他代码(处理它)线程安全。保持简单的明智方法是不变性 - 无论是真正的不变性(项目不能更改)或简单地不改变对象。当然,您可以在工作项目周围实现锁定,但这只有在您的代码使用相同的锁定策略(这很难实施)时才有所帮助。

0

我会选择一个对象从我的名单 在while循环,并运行一个线程, 然后下一个对象运行的下一个 线程

如果我真的想每个对象的线程,这在while循环中新建立一个ObjectProcessingThread为每个对象

class ObjectProcessingThread 
{ 
Thread processingThread = new Thread(); 
public TargetObject { get; set;} 

public Start() 
{ 
    //start the processing thread with threadEntryPoint as the work the thread will do 
} 

private threadEntryPoint 
{ 
    //do stuff with targetObject 
} 
} 

然后,设置它的TargetObject属性,然后呼唤:我可能不会,我会创建这样一个类g开始。

所有线程应该同步, 资源(值/连接 (关闭/打开)),由他们共享应该 不会改变.....

如果你不想值改变,不要改变它们。