一、rand函数的使用
- srand函数为rand函数指定种子,如果没指定,rand函数默认的种子为1,那么每次产生的随机序列是相同的
- srand以时间作为随机数的种子,使得rand每次取到的随机序列都不一样
1 #include <time.h>
2 #include <stdlib.h>
3
4 srand((unsigned)time(NULL));
5 printf("%u\n", rand()%MAX);
二、rand_r函数的使用
- rand_r指定固定值作为种子,每次产生的随机序列是同一个
- 每调用一次rand会改变它的状态值(如next值),而对于同一进程的多个线程共享这些状态值,所以rand函数是非线程安全的
1 #include <stdlib.h>
2
3 static unsigned int seed = 123;
4 rand_r(&seed);
5 for(int i = 0;i < 2; ++i) {
6 cout<<rand_r(&seed); // 产生的值为:2067261 384717275
7 }
8 seed = 123; //再次指定seed值为同一个
9 printf("%u\n", rand_r(&seed); // 2067261