寻找一个线程安全的随机生成器我找到了一个mersenne twister生成器类,作者说如果线程安全:
http://www.umiacs.umd.edu/~yangcj/mtrnd.html
但在研究了代码之后,我看不出它是安全的线程。在那里没有任何类型的锁或任何类似锁定变量的东西。
这个实现真的是线程安全吗?如果是这样的神奇是什么?
答案 0 :(得分:6)
讨论了如何在Multiple stream Mersenne Twister中创建多流Mersenne Twister随机数生成器,以及http://theo.phys.sci.hiroshima-u.ac.jp/~ishikawa/PRNG/mt_stream_en.html处的实现(即Fortran 95中的源代码)。该方法在Mersenne Twister序列中的点处开始多个流,这些点被广泛分离,保证多个流彼此独立并且不会产生相同的随机数序列。锁定并不需要并行代码中的潜在瓶颈;单独的流由id。
访问答案 1 :(得分:1)
从某种意义上说,它似乎是线程安全的,可以同时使用两个不同的MersenneTwist对象。如果不使用锁保护它,则不能在两个线程中使用相同的对象。
我想作者使用的原始C版本讨论了使用过的全局或静态变量,所以这是一个改进。