正确播种rand_r(int*val)方法

use*_*385 5 c pointers

所以我有多个线程将使用rand_r函数.该功能的签名是:

int rand_r(int *val);
Run Code Online (Sandbox Code Playgroud)

我试图利用时间播种这个功能,但我遇到了各种各样的麻烦.任何人都可以向我解释如何使用时间调用rand_r,或者以其他简单方式动态调度rand_r.

谢谢!

Ker*_* SB 13

对于可重入版本rand_r,种子只是状态的初始值.每个线程需要一个种子.创建一个种子数组,或使种子变量线程本地:

_Thread_local unsigned int seed = time(NULL);

int do_stuff()
{
    for ( ; ; )
    {
        int n = rand_r(&seed);
        // use n
    }
}
Run Code Online (Sandbox Code Playgroud)