我一直在多线程应用程序中工作,我仍然试图找到最好/最有效的方法来处理被多个线程使用和更改的List。
我已经看到为一个List写一个Threadsafe类并不是最好的选择,说实话,我发现所有锁定都有些混乱。
我已经考虑将其转换为ConcurrentDictionary,因为我一直在使用它们,它们似乎表现得非常好。
但是,我尝试了不同的方法,并希望听到一些意见,如果它不是一个好的选择:
if(MyList.Count > 0)
{
MyStruct[] Example = null;
Example = new MyStruct[MyList.Count];
MyList.CopyTo(Example, 0);
foreach(MyStruct B in Example)
//Code here
}
这只是我尝试过的,似乎无需在其他任何地方进行更改。我不确定我是否应该这样做,这就是为什么我在寻找一些意见
答案 0 :(得分:1)
不,这不是线程安全的。
为简单起见,考虑两个线程。
这是可能发生的最严重的事情之一。
不要随意乱用多线程。它很乱,很危险,你会留下很多难以重现和修复的错误。除非明确说某些东西是线程安全的,否则不要假设任何线程安全。多线程的强制启动:http://www.albahari.com/threading/
通常的清单如下:
答案 1 :(得分:0)
您不需要创建结构数组。只需将CopyTo与另一个List或ToArray一起使用。
另外,您可以使用BlockingCollection,这对于Producer Consumer操作来说是线程安全的。 https://msdn.microsoft.com/en-us/library/dd267312(v=vs.110).aspx