srand()
for each and every thread that calls rand()
.In its multi-thread version, the CRT implemenation in VC++6.0 will save seed to thread local storage. So, it is necessary to seed the
rand()
function in every new thread your program created. Otherwise, the random number sequence is same as if seeded by 1. This poses 2 serious questions:- How can I write a class that is thread safe, and caller won't have to worry about calling srand() whenever they create a new thread? I do not have a solution yet. The best I can think of is to ask callers, when not sure, always call
srand()
whenever a new thread is created; - A second question is what if user creates multiple threads in a batch, this will make the recommended intialization code:
srand( (unsigned) time(NULL));
fail, because the threads are created within 1 second, and you will get the same sequence in all your threads. After some searching, I found this discussion thread to be quite helpful: It proposed to multiply time by the thread ID to seedrand()
.
No comments:
Post a Comment