我有一个简单的并行任务,它可以写入数组的单独元素,如下所示:
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网格,其中每个并行线程应填充自己的一行。假设我的构造函数代码都是线程安全的,以这种方式使用数组是否有危险?也就是说,假设不同线程不会看同一个元素,是否可以安全地分配不同的数组元素?