문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 난수생성 (문단 편집) === [[멀티코어 프로세서]] === 멀티코어 프로세서에서 발생하는 데이터 경합을 활용한 난수 생성기이다. 데이터 경합은 여러 스레드가 하나의 데이터에 접근해 읽고 쓸 때 발생하는 현상으로, 가령 데이터에 1을 더한 값을 저장한다 했을 때 그 과정은 데이터를 읽고, 1을 더하고, 저장하는 것으로 나눠져 있기 때문에 데이터를 읽은 뒤 1을 더하는 과정에서 각 스레드에서 만든 임시 변수에 1을 더하면 서로 다른 변수에 1을 더한 값을 저장하기 때문에 여러 스레드에서 1을 더했음에도 값은 1만 오르는 것이다. CPU 작동속도에 따라 이 현상으로 인해 1이 오를 수도 있고 이 현상이 발생하지 않아 2가 오를 수도 있어 난수가 되는 것. 여러 CPU의 작동속도 차이에 의해 난수가 발생하기 때문에 싱글코어 환경에서는 작동하지 않는다. 싱글코어에선 CPU 하나에 여러 스레드를 컨텍스트 스위칭으로 돌려가며 작동시키기 때문에 메모리 접근 순서가 일정해지기 때문. {{{#!syntax cpp #include #include #include volatile int number; void Act(void*) { for (int i = 0; i < 10000000; ++i) { ++number; } } int main(int, char**, char**) { number = 0; _beginthread(Act, 0, NULL); for (int i = 0; i < 10000000; ++i) { ++number; } printf("%d", number); _getch(); return number; } }}} 위 코드는 7000000~13000000 정도 범위의 값을 무작위로 출력한다. 멀티코어를 활용할 경우 코어 하나를 난수 생성에 할애해야 하기 때문에 시드를 받는 용도로 쓰거나 미리 값을 많이 받아놓고 쓰는 것이 좋다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기