【发布时间】:2020-07-19 19:01:03
【问题描述】:
c 标准是否提供线程安全的随机数生成器,而不是使用全局状态,生成器使用和修改提供的状态缓冲区?我熟悉 drand48_r 和 rand_r 但在文档中说 rand_r 是一个弱随机数生成器,而 drand48_r 已过时。什么是好的线程安全随机数生成器?我需要一个用于 double 类型,一个用于 int/long 类型。如果它是便携式的,那就太好了。
【问题讨论】:
-
C 标准提供的唯一随机数生成器是
rand(),它不是线程安全的。rand_r、random_*、drand48_*由 POSIX 而非 ISO C 指定。它们生成的数字的质量取决于您的实现。如果不够好,还有很多很多第三方库。 -
你能提到一些第三方库吗?
-
stackoverflow.com/questions/822323/… 讨论了很多示例。 Mersenne Twister 是很多人喜欢的,可能主要是因为它的名字很吸引人;我无法评价它的质量或性能。
-
非常感谢。我会检查这些库,如果我没有找到任何好的线程安全生成器,我将使用 glibc 中的 rand() 源代码并对其进行编辑以使其使用提供的状态缓冲区。
标签: c