我目前正在使用随机数生成器(gsl或boost)的 C/C++ 项目。整个想法可以简化为一个接收种子并返回结果的非平凡随机过程。我正在计算该过程的不同实现的平均值。
因此,种子很重要:这些过程必须使用不同的种子,否则会使平均值产生偏差。
到目前为止,我正在使用time(NULL)
提供种子。但是,如果两个进程在同一秒开始,则种子是相同的。发生这种情况是因为我正在使用并行化(使用openMP)。
所以,我的问题是:如何在 C/C++ 上实现一个提供独立种子的“种子提供者”?
例如,我虽然在使用线程号(thread_num
)seed = time(NULL)*thread_num
,. 然而,这意味着种子是相关的:它们是彼此的倍数。这会对“伪随机”造成任何问题还是与顺序种子一样好?
要求是它必须在 Mac OS(我的电脑)和类似于 OS Cent(集群)的 Linux 发行版上工作(并且自然会提供独立的实现)。