moh*_*mad 3 c# parallel-processing parallel.foreach
我cnt在嵌套中有一个变量()parallel.foreach.我运行这个程序,显然它运作良好.有谁知道这段代码真的是线程安全的吗?是否可以在内部parallel循环中定义变量?
谢谢.
object obj = new object();
int total=0;
Parallel.For(0, 2, i =>
{
Parallel.For(0, 1000000, j =>
{
int cnt = 0;
if ((arr[i, j] % 2) == 0)
{
Interlocked.Increment(ref cnt);
}
lock (obj)
{
total= total+ (cnt / 2);
}
});
});
Run Code Online (Sandbox Code Playgroud)
此代码是线程安全的 - 唯一的共享数据(total)已正确同步.即使不使用它Interlocked.Increment(即:在编辑之前),它仍然是线程安全的.
但是,效率不高.
int total=0;
Parallel.For(0, 2,
{
Parallel.For(0, 1000000,
local => 0,
(j, state, local) =>
{
if ((arr[i, j] % 2) == 0)
{
++local;
}
return local;
},
local => Interlocked.Increment(ref total, local)
);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6423 次 |
| 最近记录: |