Microsoft .NET Framework 内部实现的随机数算法重复率很低,但也意味着需要消耗更多的CPU,并且如果一个线程上面持续使用相同随机数对象实例,会导致陷入随机数获取的死循环,C/C++ 自己从.NET框架摘要的C#翻译为C++的实现还能自己去控制一下防止死循环,但用C#直接用这个对象就有危险了,当然单个随机实例重复用不多,不会掉死循环里面去。
int server_random_r(volatile unsigned int* seed) {
unsigned int next = *seed;
int result;next *= 1103515245;
next += 12345;
result = (unsigned int)(next / 65536) % 2048;next *= 1103515245;
next += 12345;
result <<= 10;
result ^= (unsigned int)(next / 65536) % 1024;next *= 1103515245;
next += 12345;
result <<= 10;
result ^= (unsigned int)(next / 65536) % 1024;*seed = next;
return result;
}int server_random(int min, int max) {
static volatile unsigned int seed = time(NULL);int v = server_random_r(&seed);
return v % (max - min + 1) + min;
}int server_random_ascii() {
static Byte x_[] = { 'a', 'A', '0' };
static Byte y_[] = { 'z', 'Z', '9' };int i_ = server_random() % 3;
return server_random(x_[i_], y_[i_]);
}