スレッドセーフなランダムジェネレーターを探していると、作者がスレッドセーフかどうかを言うメルセンヌツイスタージェネレータークラスを見つけました。
http://www.umiacs.umd.edu/~yangcj/mtrnd.html
しかし、コードを調べた後、それが安全なスレッドであるかどうかはわかりません。そこには、いかなる種類のロックも、ロック変数に似たものもありません。
この実装は本当にスレッドセーフですか?もしそうなら、魔法は何ですか?
スレッドセーフなランダムジェネレーターを探していると、作者がスレッドセーフかどうかを言うメルセンヌツイスタージェネレータークラスを見つけました。
http://www.umiacs.umd.edu/~yangcj/mtrnd.html
しかし、コードを調べた後、それが安全なスレッドであるかどうかはわかりません。そこには、いかなる種類のロックも、ロック変数に似たものもありません。
この実装は本当にスレッドセーフですか?もしそうなら、魔法は何ですか?
マルチストリームメルセンヌツイスターでマルチストリームメルセンヌツイスター乱数ジェネレーターを作成する方法についての議論があり、http://theo.phys.sci.hiroshima-uで実装(つまり、Fortran 95のソースコード)もあります。 .ac.jp /〜ishikawa / PRNG/mt_stream_en.html。このメソッドは、広く分離されたメルセンヌツイスターシーケンス内のポイントで複数のストリームを開始し、複数のストリームが互いに独立していて、同じ乱数シーケンスを生成しないことを保証します。ロックの必要がないため、並列コードでボトルネックが発生する可能性があります。個別のストリームにはidでアクセスします。
2つの異なるMersenneTwistオブジェクトを同時に使用できるという意味で、スレッドセーフのようです。ロックで保護せずに、2つのスレッドで同じオブジェクトを使用することはできません。
作者が使用したグローバル変数または静的変数について話している元のCバージョンだと思うので、それは改善です。