質問

スレッドセーフランダムジェネレーターを探している私は、著者がスレッドが安全である場合と言う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がアクセスします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top