我想编写一个将被其他函数多次重复调用的函数。在此函数内部,应该生成许多随机数,并且将并行处理此部分。如果只运行一次,则可以为每个线程选择不同的种子,从而使随机数不相关。但是,如果第二次调用此函数,则似乎随机数将重复,除非在以后的调用中再次更改种子。
所以我的问题是,是否有一个很好的方法来生成随机数或重置种子,以便由重复调用此函数以及由不同线程生成的随机数确实是随机的?
我需要在openMP中执行此操作。是否可以在每次调用该函数后分别为每个线程存储生成器的状态,以便下次调用该函数时,随机数生成器从上一个状态开始并继续生成不相关的数字?
谢谢。
最佳答案
首先使用强随机数生成器(例如MT)。为了解决您的线程问题,请使用互斥量保护一个生成器,该互斥量将为每个线程生成种子。然后在每个线程上使用不同的生成器。
关键是初始化所需的最小次数,因为这可能将需要一个用于种子生成器的全局程序,以及每个线程的生成器的线程本地存储。
关于c - 如何在并行的重复调用中生成不相关的随机数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10966390/