gpt4 book ai didi

c# - 这些随机数是 'safe'

转载 作者:行者123 更新时间:2023-11-30 13:25:07 24 4
gpt4 key购买 nike

我不是在问这些是否真的是随机的。我只是想知道如果两个用户同时点击一个页面他们可以获得相同的随机数吗?我在想,如果我在多核服务器上运行它,我会因为同步或其他原因在很长一段时间内生成相同的随机数吗?

public static class SBackend
{
static Random randObj = null;
public static void init()
{
randObj = new Random((int)DateTime.Now.ToBinary());
runFirstTime();
}

public static long getRandomId()
{
long randNum = (long)randObj.Next() << 33;
randNum |= (uint)randObj.Next() << 2;
randNum |= (uint)randObj.Next() & 3;
return randNum;
}
}

最佳答案

是的,它有可能生成相同的数字。种子不添加任何内容(默认情况下它是基于时间的)。

另外 - 如果它是静态的,你应该同步它(Next 不是线程安全的):

static readonly Random rand = new Random();
public static int NextInt32() {
lock(rand) { return rand.Next();}
}
public static long NextInt64() {
lock(rand) { // using your algorithm...
long randNum = (long)rand.Next() << 33;
randNum |= (uint)rand.Next() << 2;
randNum |= (uint)rand.Next() & 3;
return randNum;
}
}

这当然可以仍然巧合地生成相同的数字...

如果熵很重要,或许可以考虑使用加密随机数生成器。

关于c# - 这些随机数是 'safe',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1085874/

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