C# 线程同步
我有一张物品清单, 对于每个对象,我希望运行一个完全独立的线程(线程安全性),比如……我将在while循环中从列表中选择一个对象并运行一个线程,然后对于下一个对象运行下一个线程……所有线程都应同步,以便资源(值/连接(关闭/打开))他们共享的内容不应该改变….为每个对象启动线程并不一定明智;您可能应该有少量工作线程从列表中挑选项目(或者更好的是,一个C# 线程同步,c#,multithreading,thread-safety,C#,Multithreading,Thread Safety,我有一张物品清单, 对于每个对象,我希望运行一个完全独立的线程(线程安全性),比如……我将在while循环中从列表中选择一个对象并运行一个线程,然后对于下一个对象运行下一个线程……所有线程都应同步,以便资源(值/连接(关闭/打开))他们共享的内容不应该改变….为每个对象启动线程并不一定明智;您可能应该有少量工作线程从列表中挑选项目(或者更好的是,一个队列),同步对该列表/队列的访问。可以在中找到线程安全队列的示例 一旦您有了一个工作项,就没有什么神奇的方法可以让您编写(处理)的其余代码线程安全。
队列
),同步对该列表/队列的访问。可以在中找到线程安全队列的示例
一旦您有了一个工作项,就没有什么神奇的方法可以让您编写(处理)的其余代码线程安全。保持事物简单的明智方法是不变性——要么是真正的不变性(项目不能改变),要么就是简单地不改变对象。当然,您可以围绕工作项实现锁定,但这只有在all您的代码使用相同的锁定策略时才有帮助,这是很难实施的
我将从列表中选择一个对象
在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
所有线程都应该这样同步
该资源(值/连接)
(关闭/打开))由他们共享的
不变
如果不想更改值,请不要更改它们