>백엔드 개발 >C++ >단단한 루프에서`random.next ()`에 대한 반복 호출이 동일한 숫자를 생성하는 이유는 무엇입니까?

단단한 루프에서`random.next ()`에 대한 반복 호출이 동일한 숫자를 생성하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-02-03 08:26:42418검색

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.next ()`에 대한 반복 호출이 동일한 숫자를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.