我有一个耗时的静态 C# 方法来创建一个数组(double
:s),因此并行化了操作。
由于我在进入循环之前创建了数组,并且在那之后没有篡改它的引用,所以我认为lock
在并行循环中更新它时数组本身应该足够了。
阵列本身是否可以,lock
或者我可能会面临这种方法的一些性能或死锁问题?创建一个单独的lock
变量来锁定是否更好?
下面是一些示例代码来说明:
static double[] CreateArray(int mn, int n)
{
var localLock = new object(); // Necessary?
var array = new double[mn];
Parallel.For(0, n, i =>
{
... lengthy operation ...
lock (array) // or is 'lock (localLock)' required?
{
UpdatePartOfArray(array);
}
});
return array;
}