【发布时间】:2011-01-06 09:59:05
【问题描述】:
我有以下课程
class Program
{
static Random _Random = new Random();
static void Main(string[] args)
{
...
for (int i = 0; i < no_threads; ++i)
{
var thread = new Thread(new ThreadStart(Send));
thread.Start();
}
...
}
static void Send()
{
...
int device_id = _Random.Next(999999);
...
}
}
代码创建指定数量的线程,启动每个线程,并为每个线程分配一个随机的device_id。出于某种原因,创建的前两个线程通常具有相同的device_id。我不明白为什么会这样。
【问题讨论】:
-
这在统计上是正确的,就好像你掷 2 个骰子,它们有时会给你相同的数字,而且 Random 不是线程安全的 -> blogs.msdn.com/b/pfxteam/archive/2009/02/19/9434171.aspx
-
@Mitch:所有链接的问题都没有处理相同的情况。这里只有线程安全相关,因为只有一个 Random 实例。
-
@Jon:是的,没错。
-
从表面上看,如果两个线程以相同的 device_id 结束,这会给您带来问题。如果是这种情况,那么您无论如何都不应该使用 random 分配 - 您应该做一些 保证 没有冲突的事情。
-
@dvvh:是的,但是内部间隔足够大,因此每隔一次运行就不会发生碰撞。问题已经解决了。
标签: c# multithreading random