:http://www.cplusplus.com/reference/cstdlib/rand/競合状態を避けるために、rand()の代わりに?よる
Cにおいては、ランドによって使用される生成アルゴリズムのみ この関数の呼び出しによって前進されることが保証されます。 C++ではこの制約が緩和されており、ライブラリの実装では という要素への呼び出しなど、他の状況で ジェネレータを進めることができます。その後、
しかし、ここの上に、それは言う:
機能は、内部状態のオブジェクトにアクセスし、変更し、どのランドやsrand関数への同時通話で 原因データレースをしてもよいです。
一部のライブラリでは、この種のデータ競合を明示的に回避する代替機能が提供されています(rand_r(非移植性))。
C++ライブラリの実装では、 のデータ競合が保証されていません。それは、そのインスタンス、および特定の種のために、私はいつもインスタンスへの通話のための番号の同じシーケンスを生成するよう
理想的には私は、ランドの「インスタンス」のいくつかの種類を持っていると思います。現在のバージョンでは、いくつかのプラットフォームでは、他の関数からrand()への呼び出し(多分異なるスレッドでさえ)が、自分のコードによってスレッド内で生成される数値の順序に影響を与える可能性があります。
シードが与えられている特定のシーケンスを生成することが保証されている「インスタンス」と、別の「インスタンス」への他のコールがそれに影響を与えないことを保証している代替がありますか?
編集:明確にするために、私のコードは複数の異なるプラットフォーム(iOS、Android、Windows 8.1、Windows 10、Linuxなど)で動作する予定であり、現時点ですべての実装をテストすることはできません。標準で保証されているものに基づいて実装したいのですが...
C++ 11の乱数機能をチェックしてください:http://en.cppreference.com/w/cpp/numeric/random – aschepler
@aschepler私は非常に多くの "ランダム"数字が気にしません..そこ非常に多くの異なるエンジンは、その1は、私が質問に尋ねる何がいるかを把握するために、本当に長い時間がかかりそう... –
オーケーですが、新しい方法は、あなたが頼るのではなく、したいしかし、すべての状態を保存することができますいくつかのグローバルな状態。 – aschepler