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 중국어 웹사이트의 기타 관련 기사를 참조하세요!