当使用多个线程调用负责生成不同随机数的通用函数时,考虑以下因素至关重要:初始化随机数生成器的方法。函数 srand(time(0)) 负责初始化生成器。然而,它在代码中的放置会影响结果的一致性。
问题是是否应该在每个函数执行开始时为整个程序调用一次 srand(time(0)) ,或者是否有替代策略。
答案在于与 rand() 相关的线程安全问题。文档明确指出 rand() 不是线程安全的,这意味着它会在每次调用时修改隐藏状态。为了确保跨线程的行为一致,必须显式处理状态。
替代函数 rand_r() 接受指向无符号整数的指针作为状态,提供最少量的状态信息。该函数将产生较弱的伪随机生成器。作为增强选项,建议使用 drand48_r(3)。
因此,为了跨多个线程维持可预测的随机数生成,有必要使用线程安全函数,如 rand_r() 或 drand48_r(3),而不是兰特()。
以上是如何确保 C 中线程安全的随机数生成?的详细内容。更多信息请关注PHP中文网其他相关文章!