gpt4 book ai didi

c# - Parallel.For 有异常行为

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:51 24 4
gpt4 key购买 nike

我正在尝试将这个素数筛选函数转移到使用 Parallel.For 以便它可以利用多个内核。

但是,当我运行它时,b 变量的值似乎随机跳跃甚至根本没有变化,尤其是对于较高的 To 值。

static List<long> Sieve(long To)
{
long f = 0;
To /= 2;

List<long> Primes = new List<long>();
bool[] Trues = new bool[To];

if (To > 0)
Primes.Add(2);

long b = 0;

Parallel.For(1L, To, a =>
{
b++;

if (Trues[b])
return;

f = 2 * b + 1;
Primes.Add(f);

for (long j = f + b; j < To; j += f)
Trues[j] = true;
});

return Primes;
}

这是怎么回事,我怎样才能阻止它发生?

最佳答案

b 跨线程共享。如果多个线程同时处理那个糟糕的变量,您期望会发生什么?

似乎 ba 在您的代码中总是相等的(或相差一个)。使用 a。并同步访问所有其他共享状态(如列表)。

关于c# - Parallel.For 有异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14635081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com