スレッドセーフメルセンヌツイスター
-
01-10-2019 - |
質問
スレッドセーフランダムジェネレーターを探している私は、著者がスレッドが安全である場合と言うMersenne Twisterジェネレータークラスを見つけました:
http://www.umiacs.umd.edu/~yangcj/mtrnd.html
しかし、コードを研究した後、安全なスレッドであるとわかりません。そこにはロック変数に似た種類のロックなどがありません。
この実装は本当に安全ですか?もしそうなら、魔法は何ですか?
解決
2つの異なるMersennetWistオブジェクトを同時に使用できるという意味で、スレッドセーフのようです。ロックで保護せずに、2つのスレッドで同じオブジェクトを使用することはできません。
著者が使用されているグローバル変数または静的変数について語る元のCバージョンであるため、それは改善です。
他のヒント
複数のストリームMersenne Twisterで複数のストリームMersenne Twisterの乱数ジェネレーターを作成する方法と、実装(すなわち、Fortran 95のソースコード)についての議論があります。 http://theo.phys.sci.hiroshima-u.ac.jp/abishikawa/prng/mt_stream_en.html. 。このメソッドは、複数のストリームが互いに独立しており、同じ乱数シーケンスを生成しないことを保証する、広く分離されたMersenne Twisterシーケンスのポイントで複数のストリームを開始します。ロックのニーズはなく、したがって並列コードに潜在的なボトルネックがあります。個別のストリームにはIDがアクセスします。
所属していません StackOverflow