此功能位于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);
}
就像随机函数一样,但是我不确定。
答案 0 :(得分:2)
该函数通过将64位重新组合为32位值,从64位种子值生成一个四元素状态向量。状态向量中的所有四个元素都设置为相同的值,但是所使用的算法要求状态向量中的元素没有太多的前导零。
prandom_u32()
here中的lib/random32.c
实现代码中对此要求进行了说明。
prandom_seed_state()
函数本身不是伪随机数生成器(PRNG),而是prandom_u32()
,但是需要初始化PRNG的状态。 (实际上,每个线程都有自己的伪随机状态,以避免不必要的同步。)