C# 随机不变

标签 c# .net random parallel-processing

我已经搜索过这个问题,但我找到的解决方案都没有帮助。也许有人可以帮助我。

我有以下循环:

private static readonly Random RANDOM = new Random();
...
int[] array; // is initialized, when used. ;)
if (array.Sum() != 0)
{
    int j = 0;
    do {
        j = RANDOM.Next(8);
    } while (array[j] == 0);
}

整个循环在另一个循环中,而这个循环又在 Parallel.Foreach 循环中。 看起来,j 总是0。大多数时候它并不明显,但是如果 array[0] == 0,那么它就不会跳出循环。 我怀疑 do-while 循环可能太快了。但也在几秒钟后(~30)它不会离开循环。所以 Random 似乎没有返回新的或不同的值(即使在同一个线程中)。

我也试过this solution但没有效果。

最佳答案

试试这个,因为 Random 不是线程安全的:

private static Random RANDOM = new Random();
private static object _randomLock = new object();

...

int[] array; // is initialized, when used. ;)
if (array.Sum() != 0)
{
    int j = 0;
    do {
        lock(_randomLock)
        {
            j = RANDOM.Next(8);
        }
    } while (array[j] == 0);
}

关于C# 随机不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16865182/

相关文章:

c# - 将不同的枚举组合成一个参数 C#

c# - 在运行时创建一组两个 Div

c# - FileSystemWatcher 的多个事件一次加薪

c++ - 如何创建没有特定定义的随机分布? Uniform_int_distribution是否从其他类继承?

random - 如何在Rust中使用HC-128生成随机数?

java - 随机数生成器正在生成巨大的负数

c# - 为什么我的表单在显示时会调整大小?

c# - 数据表单元格数学

c# - 将对象转换为通用列表

c# - ASP.NET 页面性能