该函数位于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/

10-10 01:24