尽管在多线程中,但自从我将下面的行添加到我的应用程序后,它似乎经常崩溃,所以我假设它不是线程安全的。线程安全阵列
private readonly string [] _foo = Enumerable.Range(1,1000).Select(i => i.ToString())。ToArray();
我的选择是什么让这个线程安全?
尽管在多线程中,但自从我将下面的行添加到我的应用程序后,它似乎经常崩溃,所以我假设它不是线程安全的。线程安全阵列
private readonly string [] _foo = Enumerable.Range(1,1000).Select(i => i.ToString())。ToArray();
我的选择是什么让这个线程安全?
初始化数组的代码很好。您将数组标记为readonly
,这意味着无法将新数组分配给_foo
字段 - 但您的代码仍然可以修改数组的元素。操作本身不会导致崩溃,但如果数组从多个线程更改,则可能会得到意外的结果。
没有更多的信息,很难说出什么问题。您的应用程序崩溃的方式是什么?
如果您使用的是C#4,则可以使用一些已经内置的集合。由于他们依赖无锁策略,他们比任何阻止收集都快。
List<T>
或T[]
- >SynchronizedCollection<T>
(注意,枚举不是线程安全的)Dictionary<T>
- >ConcurrentDictionary<T>
Queue<T>
- >ConcurrentQueue<T>
Stack<T>
- >ConcurrentStack<T>
BlockingCollection<T>
该行代码没有任何正确或错误。你需要向我们展示你如何使用foo数组,这可能是问题所在。 – BFree 2011-05-23 14:19:32
对不起,有这么有限的信息,我会尽力让你们有更多的时间。再次感谢你的帮助。 – 2011-05-23 14:23:51