Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 线程安全阵列_C#_Arrays_Multithreading_Thread Safety - Fatal编程技术网

C# 线程安全阵列

C# 线程安全阵列,c#,arrays,multithreading,thread-safety,C#,Arrays,Multithreading,Thread Safety,我在多线程方面很糟糕,但是自从我在我的应用程序中添加了以下代码以来,它似乎经常崩溃,所以我认为它不是线程安全的 私有只读字符串[]\u foo=Enumerable.Range1000.Selecti=>i.ToString.ToArray 我有哪些选项可以使这个线程安全?初始化数组的代码很好。您将数组标记为只读,这意味着不可能将新数组分配给_foo字段,但您的代码仍然可以修改数组的元素。操作本身不会导致崩溃,但如果从多个线程更改阵列,则可能会得到意外的结果 如果没有更多的信息,很难说问题出在哪

我在多线程方面很糟糕,但是自从我在我的应用程序中添加了以下代码以来,它似乎经常崩溃,所以我认为它不是线程安全的

私有只读字符串[]\u foo=Enumerable.Range1000.Selecti=>i.ToString.ToArray


我有哪些选项可以使这个线程安全?

初始化数组的代码很好。您将数组标记为只读,这意味着不可能将新数组分配给_foo字段,但您的代码仍然可以修改数组的元素。操作本身不会导致崩溃,但如果从多个线程更改阵列,则可能会得到意外的结果


如果没有更多的信息,很难说问题出在哪里。应用程序以何种方式崩溃?

如果您使用的是C4,您可以使用一些内置的集合。它们比任何阻塞收集都要快,因为它们依赖于无锁策略

看一看

List或T[]->SynchronizedCollection请注意枚举不是线程安全的 字典->并发字典 队列->并发队列 堆栈->并发堆栈 也考虑生产者消费者场景的阻塞收集
那行代码没有对错。你需要向我们展示你是如何使用foo数组的,这可能就是问题所在。很抱歉信息如此有限,我会在有时间的时候再给你们介绍一些。再次感谢你的帮助。