首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >System.Random一直返回相同的值

System.Random一直返回相同的值
EN

Stack Overflow用户
提问于 2008-11-17 15:36:56
回答 5查看 4K关注 0票数 9

我使用的是一个System.Random对象,它是通过一个固定的种子实例化的,所有这些都考虑了应用程序。我正在调用NextDouble方法,经过一段时间后,我得到的结果是0.0。

有什么办法解决这个问题吗?有没有其他人遇到过这个问题?

编辑:为了方便起见,我在整个运行过程中只有一个种子设置为1000。random.NextDouble被调用了几十万次。这是一个优化器应用程序,可以运行几个小时,但这实际上发生在10-0分钟的执行之后。我最近向应用程序添加了更多的随机呼叫。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-11-17 15:55:45

.NET中的随机数生成器不是线程安全的。其他开发人员也注意到了同样的行为,一种解决方案如下(来自http://blogs.msdn.com/brada/archive/2003/08/14/50226.aspx):

代码语言:javascript
运行
复制
class ThreadSafeRandom
{
    private static Random random = new Random();

    public static int Next()
    {
       lock (random)
       {
           return random.Next();
       }
    }
}
票数 18
EN

Stack Overflow用户

发布于 2008-11-17 15:42:02

你多久播种一次随机?它应该只在程序开始时执行一次。

一旦播种了一个给定值,它将始终产生完全相同的序列。

票数 9
EN

Stack Overflow用户

发布于 2008-11-17 15:56:17

Tomas,我以前遇到过这个"bug“,我的解决方案是让_rnd变量成为模块级的:

代码语言:javascript
运行
复制
Private Shared _rnd As System.Random()
Public Shared Function RandRange(ByVal low As Integer, ByVal high As Integer) As Integer
    If _rnd Is Nothing Then
        _rnd = New System.Random()
    End If
    Return rnd.Next(low, high)
End Function
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/295900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档