首页 > 解决方案 > 并行分配不同的数组元素有什么危险吗?

问题描述

我有一个简单的并行任务,它写入数组的单独元素,如下所示:

MyClass[] newObjects = new MyClass[ObjectsPerEdge*ObjectsPerEdge]; // ObjectsPerEdge = const int
Parallel.For(0, ObjectsPerEdge, new ParallelOptions { MaxDegreeOfParallelism = 2 }, z =>
{
    for (int x = 0; x < ObjectsPerEdge; x++)
    {
        newObjects[x + z*ObjectsPerEdge] = new MyClass(...params...);
    }
});

我基本上是在逐行填充一个 2D 网格,其中每个并行线程应该填充自己的一行。假设我的构造函数代码都是线程安全的,以这种方式使用数组有什么危险吗?即不同线程分配不同的数组元素是否安全,假设它们永远不会查看相同的元素?

标签: c#arraysparallel-processingthread-safety

解决方案


推荐阅读