Programming/C/C++

[c/c++] srand 사용시 주의사항

acidpop 2011. 8. 22. 13:16
반응형


예전에 개발을 하다가 정말 이상한 현상을 발견해서 한참 고생한적이 있다.

rand 함수를 이용해 키 값을 만드는 모듈이었는데

분명 srand(time(NULL));  을 호출을 했는데도 불구하고

rand() 함수가 계속 똑같은 패턴으로 숫자를 만들어내는것이다.

아니 도데체 이게 뭔일인가 싶어서 디버깅도 해보고

1스텝씩 지나가봐도 srand 는 분명 호출을 하는데 rand 는 똑같은 숫자만 나오고...ㅠㅠ

며칠이 지나서 알게 된 사실

srand 는 프로세스 종속이 아닌 Thread 종속이다.

즉 Thread 별로 srand seed 값을 설정해야 한다는 점이다.

나는 main 함수쪽에서 srand 를 호출했으니 당연히 전역적으로 rand 가 바뀔꺼라 생각해서 만든 모듈이었는데..

즉 rand 함수를 사용하는 Thread 에서 초기에 srand 로 seed 값 설정을 해야 한다.

아직 Thread 를 다루지 않고 있는 사람도 알아 두면 좋을것 같아 블로그에 포스팅한다.



좀 더 자세히 설명되어 있는 블로그가 있어 링크를 참조하면 좋을듯

http://jacking.tistory.com/450