【问题标题】:Generate same random [duplicate]生成相同的随机[重复]
【发布时间】:2019-05-21 15:08:06
【问题描述】:

我需要我的线程每次生成不同的随机数,但有些不是那么随机,因为它们与以前的相同。

已经看到了一些关于这个的答案,但我不熟悉 c#,而且我拥有代码的方式与它不完全兼容。

请注意,我正在启动 c#,即使它可能很简单,但我不知道如何适应。

我试过了

static int seed = Environment.TickCount;
static readonly ThreadLocal<Random> random =
new ThreadLocal<Random>(() => new Random(Interlocked.Increment(ref seed)));

但是没有成功...我真的不知道我应该在哪里使用它。

这是我现在的代码。

for (var i = 0; i <= loopTo; i++)
{
    var trd = new Thread(() =>
    {
        while (go != 0)
        {
            try
            {
                int count = 0;
                string c1 = "";
                string pool = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
                Random cc = new Random();
                int strpos = 0;
                while (count <= 3)
                {
                    strpos = cc.Next(0, pool.Length);

                    c1 = c1 + pool[strpos];
                    count = count + 1;
                }

                // SOME MORE CODE
            }
            catch (WebException ex)
            {

            }
        }
    });
    trd.IsBackground = true;
    threads.Enqueue(trd);
    trd.Start();
}

【问题讨论】:

  • 另外你可能想看看docs.microsoft.com/en-us/dotnet/api/…如果这个和上面的重复没有回答你的问题,请编辑包括你尝试过的内容,哪些部分不起作用,为什么你不'不了解他们,所以我们可以帮助你进一步
  • “随机”并不意味着唯一:它意味着不可预测。通常,您无法预测随机序列中下一个数字的一​​件事是它是否等于序列中的任何前一个数字。 (不过,如果可能的值数量有限,并且如果等待的时间足够长,您将到达 每个 下一个值必须等于某个前一个值的地步。)
  • 谢谢 Taw,但我提到我进行了搜索,我确实找到了一些东西,但也许我没有在正确的地方应用它。
  • 你说得对,所罗门,虽然我很长一段时间都没有得到一两个。我得到了几十个。似乎 random() 与时钟一起使用,并且因为我通常有 +300 个这样的线程,它会生成相同的。

标签: c# multithreading random


【解决方案1】:

您可以简单地使用以下代码。这将确保您永远不会得到重复的随机字符串。

  string randromString = Guid.NewGuid().ToString();

【讨论】:

  • FYI
  • RNGCrytoServiceProvider.GetBytes 是更好的选择
猜你喜欢
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 2011-06-12
  • 2011-06-18
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多