该函数位于linux-4.16.12\include\linux\random.h中
static inline u32 __seed(u32 x, u32 m)
{
return (x < m) ? x + m : x;
}
static inline void prandom_seed_state(struct rnd_state *state, u64 seed)
{
u32 i = (seed >> 32) ^ (seed << 10) ^ seed;
state->s1 = __seed(i, 2U);
state->s2 = __seed(i, 8U);
state->s3 = __seed(i, 16U);
state->s4 = __seed(i, 128U);
}
就像随机函数一样,但是我不确定。
最佳答案
该函数通过将64位重新组合为32位值,从64位种子值生成四元素状态 vector 。状态 vector 中的所有四个元素都设置为相同的值,但是所使用的算法要求状态 vector 中的元素没有太多的前导零。
在prandom_u32()
here中的lib/random32.c
实现代码中解释了此要求。prandom_seed_state()
函数本身不是伪随机数生成器(PRNG),即prandom_u32()
,但是需要初始化PRNG的状态。 (实际上,每个线程都有其自己的伪随机状态,以避免不必要的同步。)
关于c - prandom_seed_state的作用是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53454735/