好吧,rand_r函数应该是一个线程安全的函数.但是,通过它的实现,我无法相信它本身不能被其他线程改变.假设两个线程将使用相同的变量种子同时调用rand_r.所以会发生读写比赛.由glibc实现的代码rand_r如下所示.谁知道为什么rand_r被称为线程安全?
int
rand_r (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;
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个种子随机数生成器,它创建一个数字池作为上下文.它不一定太好.它用于游戏,但重要的是,游戏引擎的每个实例都有自己的数字池,因此不同的游戏实例甚至游戏中使用随机数的其他部分都不会破坏游戏的确定性特征.生成的数字.
目前我正在使用rand(),显然没有这个功能.
有没有能够做我想做的c或Objective-c发电机?