1

是否可以并行化一个 for 循环,从最大值开始,然后递减?在 Parallel.For 签名中,似乎只有“i”递增时才会出现这种情况

for (int i = Int32.MaxValue; i >= 0; --i)
{
    // do something...
}

问候,

弗洛里安

4

4 回答 4

4

如果您正在编写并行代码,则无关紧要:

MSFT不保证循环将从低到高运行,或以任何特定顺序运行。

注意:Parallel.For 方法不保证任何特定的执行顺序。与顺序循环不同,一些较高值的索引可以在一些较低值的索引之前处理。

在实践中,Parallel.For 绝对不会按顺序运行。

考虑 Jeppe Stig Nielsen 的示例(来自评论):

System.Threading.Tasks.Parallel.For(0, 25, i => { Console.WriteLine(i); });

在我的 4 核机器上,我得到以下输出:

0
1
2
4
5
7
8
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
3
9
6

显然循环不正常。

于 2012-08-07T08:43:05.377 回答
1

不,但您当然可以从循环计数器创建派生索引

Parallel.For(0, Int32.MaxValue, (i) => 
{ 
    int derivedIndex = Int32.MaxValue - i;
});
于 2012-08-07T08:41:01.853 回答
0
....
int nTot = aRwRemove.Count - 1;
Parallel.For( 0, nTot, i =>
    {
        aRwRemove[nTot - i].Delete();
    }
);
----
于 2016-11-23T11:51:02.690 回答
-1

通过计算for循环内的递减值很容易实现。

for (int j = 0; j < Int32.MaxValue; j++)
{
    var i = Int32.MaxValue - j;
    // do something...
}
于 2012-08-07T08:41:30.827 回答