【问题标题】:C89: Multithreaded Random Values with rand_r()C89:带有 rand_r() 的多线程随机值
【发布时间】:2014-11-03 20:18:52
【问题描述】:

所以,我很好奇有人如何使用 rand_r 命令跨多个线程获取随机值。如果我使用 time(NULL) 作为种子,每个人最终都会得到 sam 种子,因为线程创建得非常接近。这些操作都基于该随机种子,因此对于我的程序的其余部分,所有线程都保持相同。如何获得 [ USING RAND_R(*int seed) ] 一个在所有线程中都不同的随机数?

提前致谢。

【问题讨论】:

  • 您可以拨打time(NULL)获取第一种子和第二种子。然后您可以使用第二个种子生成第三个种子。以此类推。
  • 只使用种子 = time(NULL) + thread_id 怎么样?或对它们进行异或。

标签: c multithreading random pthreads c89


【解决方案1】:

Ubuntu Linux 14.04 上 rand_r 的 man page 建议:

rand_r()seedp 参数所指向的值只提供了非常小的数量 状态,所以这个函数将是一个弱伪随机生成器。请改用drand48_r(3)

【讨论】:

  • 这如何回答这个问题?更不用说这仅适用于 Ubuntu,手册页在另一个平台上可能会有所不同。
  • 感谢您的回复。我的作业要求我为我的睡眠时间找到一个随机数,但它坚持我使用 rand_r... 我看到了这个,但试图在指南中找到答案
  • 唯一的建议是我必须为种子变量使用全局变量,并且只在程序开始时填充它,即不是在每个 rand_r() 调用之前。
【解决方案2】:

您可以使用arc4random 为每个线程生成种子值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2023-03-28
    • 2012-07-13
    • 2017-10-24
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多