【问题标题】:Thread safe random number generator in cc中的线程安全随机数生成器
【发布时间】:2020-07-19 19:01:03
【问题描述】:

c 标准是否提供线程安全的随机数生成器,而不是使用全局状态,生成器使用和修改提供的状态缓冲区?我熟悉 drand48_r 和 rand_r 但在文档中说 rand_r 是一个弱随机数生成器,而 drand48_r 已过时。什么是好的线程安全随机数生成器?我需要一个用于 double 类型,一个用于 int/long 类型。如果它是便携式的,那就太好了。

【问题讨论】:

  • C 标准提供的唯一随机数生成器是rand(),它不是线程安全的。 rand_rrandom_*drand48_* 由 POSIX 而非 ISO C 指定。它们生成的数字的质量取决于您的实现。如果不够好,还有很多很多第三方库。
  • 你能提到一些第三方库吗?
  • stackoverflow.com/questions/822323/… 讨论了很多示例。 Mersenne Twister 是很多人喜欢的,可能主要是因为它的名字很吸引人;我无法评价它的质量或性能。
  • 非常感谢。我会检查这些库,如果我没有找到任何好的线程安全生成器,我将使用 glibc 中的 rand() 源代码并对其进行编辑以使其使用提供的状态缓冲区。

标签: c


【解决方案1】:

C17 定义了随机函数 rand() (7.22.2.1) 和 srand() (7.22.2.2)。两者都不需要以避免数据竞争。

【讨论】:

    猜你喜欢
    • 2012-02-07
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2017-04-20
    相关资源
    最近更新 更多