线程同步

时间:2010-01-19 06:51:06

标签: c# multithreading thread-safety

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

2 个答案:

答案 0 :(得分:2)

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

一旦你拥有一个工作项,就没有灵丹妙药可以使你编写的其余代码(处理它)成为线程安全的。一种让事情变得简单的合理方法是不变性 - 要么是真正的不变性(项目不能更改),要么只是不要更改对象。您当然可以围绕工作项实现锁定,但这仅在所有您的代码使用相同的锁定策略时才有用,这很难实施。

答案 1 :(得分:0)

  

我将从列表中选择一个对象   在while循环并运行一个线程和   然后为下一个对象运行下一个   线程

如果我真的想要每个对象的一个​​线程,我可能不会,我会创建一个这样的类:

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
}
}

然后在while循环中为每个对象新建一个ObjectProcessingThread,设置它的TargetObject属性,然后调用Start。

  

所有线程都应该同步   资源(值/连接   (关闭/打开))他们应该分享   不要改变.....

如果您不想更改值,请不要更改它们。

相关问题