【发布时间】: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