And*_*son 4 c# performance locking task-parallel-library
我有一个耗时的静态C#方法来创建一个数组(of 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;
}
Run Code Online (Sandbox Code Playgroud)
由于array这里是一个引用类型,在操作期间没有重新分配,并且没有暴露在其他地方(其他一些代码可以锁定它),是的,它就足够作为锁对象本身.但是,如果更新是针对阵列的不同部分,即
array[i] = ... // i is separate
Run Code Online (Sandbox Code Playgroud)
那么没有必要锁定任何东西.
| 归档时间: |
|
| 查看次数: |
2029 次 |
| 最近记录: |