pfd*_*ers 2 c random macos gnu openmp
所以我一直在用 C 编写一些应用程序并使用 OpenMP 进行并行化。我实现了 Monte-Carlo Pi 估计,发现正常的 rand() 函数不是可重入和线程安全的。建议使用 drand48_r 选项。
现在问题来了,我的应用程序在 Linux 上编译得很好,例如。Ubuntu、Fedora 和 CentOS 但不能在 Mac OS X 上编译。 OS X 上的编译错误是。
simple.c:7: 错误:“randBuffer”的存储大小未知
用作简单示例的代码是:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
double x;
struct drand48_data randBuffer;
srand48_r(time(NULL), &randBuffer);
drand48_r(&randBuffer, &x);
printf("Random number: %f\n", x);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
我阅读了它,并在手册页中找到了一条说明,
这些函数是 GNU 扩展,不可移植。
这是它的链接:http : //www.kernel.org/doc/man-pages/online/pages/man3/drand48_r.3.html
所以我有很多问题;
嗯,就是这样。
该示例使用 gcc 编译为,
gcc simple.c -o simple
我真的没有看到使用drand48_rover的好处erand48。erand48具有相同类型的随机生成器,drand48但与接收随机生成器的状态作为函数参数相比,它完美地完成了这项工作。
该_r延伸部将结果存储在适当位置(第二个参数),并返回总是保证是一个错误代码0。我看不出这有多大用处。我会坚持使用 POSIX 接口(特别是erand48)。