首页 > 后端开发 > C++ > 为什么在紧密的循环中重复呼叫`random.next()`?

为什么在紧密的循环中重复呼叫`random.next()`?

Mary-Kate Olsen
发布: 2025-02-03 08:26:42
原创
417 人浏览过

Why Do Repeated Calls to `Random.Next()` in a Tight Loop Produce Identical Numbers?

在循环中有效地生成随机数

以下代码片段在循环中生成随机数时演示了一个常见的陷阱:

<code class="language-csharp">// Inefficient random number generation
public static int RandomNumber(int min, int max)
{
    Random random = new Random();
    return random.Next(min, max);
}</code>
登录后复制

>在紧密的循环中反复调用此功能,例如:

>
<code class="language-csharp">byte[] mac = new byte[6];
for (int x = 0; x < 6; x++)
{
    mac[x] = (byte)RandomNumber(0, 255);
}</code>
登录后复制

>通常会在数组中产生相同的值。 这是因为在每次迭代中的系统时钟都重新定位。如果循环迅速执行,则时钟尚未发生重大变化,从而导致相同的种子,因此,“随机”数字的序列相同。 mac>Random解决方案:一个,共享的实例

正确的方法涉及创建一个单个实例并在整个循环中重复使用。 还应考虑用于多线程应用程序的线程安全。 这是一个改进的版本:

>通过使用Random>实例,我们确保创建一个

对象。
<code class="language-csharp">// Efficient and thread-safe random number generation
private static readonly Random random = new Random();
private static readonly object syncLock = new object();

public static int RandomNumber(int min, int max)
{
    lock (syncLock)
    {
        return random.Next(min, max);
    }
}</code>
登录后复制
>语句可以在多线程场景中保护种族条件,确保只有一个线程一次访问

>方法。 这保持了生成数字的完整性和随机性。

以上是为什么在紧密的循环中重复呼叫`random.next()`?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板