首页 >后端开发 >C++ >如何在 C# 中创建线程安全的随机数生成器?

如何在 C# 中创建线程安全的随机数生成器?

Susan Sarandon
Susan Sarandon原创
2025-01-21 02:42:09452浏览

How Can I Create a Thread-Safe Random Number Generator in C#?

使用 C# 的随机数生成器确保线程安全

C# 的内置 Random.Next() 方法不是线程安全的。 在多线程应用程序中使用它可能会由于竞争条件而导致错误的结果。 幸运的是,创建线程安全版本非常简单。

线程安全的随机数生成器

下面的ThreadSafeRandom类提供了一种使用线程静态变量来保证线程安全的解决方案。每个线程都有自己独立的Random实例。

<code class="language-csharp">public class ThreadSafeRandom
{
    private static readonly Random _global = new Random();
    [ThreadStatic] private static Random _local;

    public int Next()
    {
        if (_local == null)
        {
            int seed;
            lock (_global)
            {
                seed = _global.Next();
            }
            _local = new Random(seed);
        }

        return _local.Next();
    }
}</code>

唯一随机数的种子管理

多个 Random 实例的一个常见问题是生成相似或相同的数字,尤其是在快速连续创建时。 此实现通过使用全局 Random 实例 (_global) 为每个线程本地 Random 实例 (_local) 生成唯一的种子来解决此问题。 lock 语句可防止访问全局 Random 进行种子生成时的竞争条件。

此方法确保每个线程都有不同的种子,从而产生真正随机且独立的数字序列。 开发人员现在可以在多线程应用程序中安全地使用随机数生成,避免非线程安全方法的陷阱。

以上是如何在 C# 中创建线程安全的随机数生成器?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn