rand()
は「スレッドセーフ」でなく、毎回異なるシード値を使用するため、使用しないように頼まれました。わずか数秒で精度を持つrand_r()を使ってCでスレッドセーフな乱数生成器を作成するには?
unsigned int seed = time(NULL);
:私はこのようなシード値を使用してGitHubの上の例を見つけました。プログラムは1秒未満で実行されるので、インスタンスごとに同じ乱数を得ることになります。
rand_r()
または他の「スレッドセーフ」メソッドを使用して10個の乱数を生成するように、このアルゴリズムを修正する方法を教えてください。
int main()
{
for(int i = 0; i < 10; i++){
int random;
unsigned int seed = time(NULL);
random = 1 + (rand_r(&seed)% 10);
printf("%d\n",random);
}
return 0;
}
ように多くの類似した質問と同じように - 唯一のシード**度**。 –
Huh..odd。何度もシーディングを行うと、数字が正確に同じになるのですか? – btramisetty
'rand_r'は一つの引数を持つ確定的な関数なので、' seed'の値です。 –