Thread safe mersenne twister

半城伤御伤魂 提交于 2021-01-27 06:12:39

问题


Looking for a thread safe random generator I found a mersenne twister generator class that the author says if thread safe:

http://www.umiacs.umd.edu/~yangcj/mtrnd.html

But after studying the code I cannot see were it is safe thread. There are no locks of any kind or anything resembling a lock variable in there.

Is this implementation really thread safe? If so what is the magic?


回答1:


It appears to be thread-safe in the sense that two different MersenneTwist objects can be used concurrently. You can't use the same object in two threads without protecting it with a lock.

I guess the original C version the author talks about used global or static variables so it's an improvement.




回答2:


There is a discussion of how to make a multiple-stream Mersenne Twister random number generator at Multiple stream Mersenne Twister, and also an implementation (i.e., source code in Fortran 95) at http://theo.phys.sci.hiroshima-u.ac.jp/~ishikawa/PRNG/mt_stream_en.html. The method starts multiple streams at points in the Mersenne Twister sequence that are widely separated, guaranteeing that the multiple streams are independent of each other and won't produce the same random number sequence. There are no needs for locks and thus potential bottle necks in parallel code; the separate streams are accessed by id.



来源:https://stackoverflow.com/questions/3158213/thread-safe-mersenne-twister

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!