最近做了一个小项目,用到 rand(),对 rand() 在多线程中的使用有一点心得。
rand() 通常在调用之前调用 srand ( unsigned ( time(NULL))),这是以时间为种子,产生一个随机数序列。
对于多线程来说,若未对各个线程进行 srand(),则各线程中rand() 的输出是一样的;同理,若各个线程同时批量调用 srand ( unsigned ( time(NULL))) 也是不行的,因为种子可能相同。
应对方法是对各个线程使用不同的种子,比如GetCurrentThreadId(),以当前线程ID为种子。