>백엔드 개발 >C++ >C#에서 스레드로부터 안전한 난수 생성기를 어떻게 만들 수 있나요?

C#에서 스레드로부터 안전한 난수 생성기를 어떻게 만들 수 있나요?

Susan Sarandon
Susan Sarandon원래의
2025-01-21 02:42:09408검색

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으로 문의하세요.