5

スレッドセーフなランダムジェネレーターを探していると、作者がスレッドセーフかどうかを言うメルセンヌツイスタージェネレータークラスを見つけました。

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

しかし、コードを調べた後、それが安全なスレッドであるかどうかはわかりません。そこには、いかなる種類のロックも、ロック変数に似たものもありません。

この実装は本当にスレッドセーフですか?もしそうなら、魔法は何ですか?

4

2 に答える 2

6

マルチストリームメルセンヌツイスターでマルチストリームメルセンヌツイスター乱数ジェネレーターを作成する方法についての議論があり、http://theo.phys.sci.hiroshima-uで実装(つまり、Fortran 95のソースコード)もあります。 .ac.jp /〜ishikawa / PRNG/mt_stream_en.html。このメソッドは、広く分離されたメルセンヌツイスターシーケンス内のポイントで複数のストリームを開始し、複数のストリームが互いに独立していて、同じ乱数シーケンスを生成しないことを保証します。ロックの必要がないため、並列コードでボトルネックが発生する可能性があります。個別のストリームにはidでアクセスします。

于 2010-10-08T13:11:41.307 に答える
1

2つの異なるMersenneTwistオブジェクトを同時に使用できるという意味で、スレッドセーフのようです。ロックで保護せずに、2つのスレッドで同じオブジェクトを使用することはできません。

作者が使用したグローバル変数または静的変数について話している元のCバージョンだと思うので、それは改善です。

于 2010-07-01T13:38:09.613 に答える