这个特定的 Parallel.For() 循环线程安全吗?
Is this particular Parallel.For() loop thread-safe?
Parallel.For(0, someStringArray.Count, (i) =>
{
someStringArray[i] = someStringArray[i].Trim();
});
我确定只有 通过 Parallel.For
读取 集合才被认为是线程安全的。
编辑: 该数组未通过代码的其他部分访问。
Is this particular Parallel.For()
loop thread-safe?
取决于 someStringArray
类型的实现,只要您在枚举时不修改集合本身即可。
在您的示例中,两个线程绝不会修改集合中的同一元素。
一般来说,集合不被认为是线程安全的,因为它们的内部逻辑可能会失败,例如,如果您从一个线程读取一个项目,而另一个线程添加一个项目并导致集合调整大小(和项目被复制)在读操作的中间。
虽然固定大小的数组不应该发生这种情况。 List<T>
在幕后使用数组,但在一般情况下您不应该真正依赖该实现细节。
Parallel.For(0, someStringArray.Count, (i) =>
{
someStringArray[i] = someStringArray[i].Trim();
});
我确定只有 通过 Parallel.For
读取 集合才被认为是线程安全的。
编辑: 该数组未通过代码的其他部分访问。
Is this particular
Parallel.For()
loop thread-safe?
取决于 someStringArray
类型的实现,只要您在枚举时不修改集合本身即可。
在您的示例中,两个线程绝不会修改集合中的同一元素。
一般来说,集合不被认为是线程安全的,因为它们的内部逻辑可能会失败,例如,如果您从一个线程读取一个项目,而另一个线程添加一个项目并导致集合调整大小(和项目被复制)在读操作的中间。
虽然固定大小的数组不应该发生这种情况。 List<T>
在幕后使用数组,但在一般情况下您不应该真正依赖该实现细节。