[英]rand() generates same numbers when used with fork()
我正在嘗試在特定范圍內生成隨機數。 我也在我的程序中使用子進程。
但是, rand()
函數在 for 循環中生成相同的數字,比如 550,即使我使用srand()
對其進行了隨機化
下面是演示代碼:
int main()
{
int count = 5;
int i;
for (i = 0; i < count; i++)
{
pid_t pid = fork();
if (pid == 0)
{
// random number between 500 and 700
srand(time(NULL));
int random = rand() % 100 + 500;
printf("%d\n", random);
exit(0);
}
else
{
wait(NULL);
}
}
return 0;
}
問題出在哪兒? 我該如何解決?
任何幫助表示贊賞。
您的程序生成的所有進程都創建得非常快,因此調用time(NULL)
返回的值對於所有進程都是相同的。 它作為種子傳遞給偽隨機數生成器,使其為每個進程生成相同的偽隨機數序列。
為了在每個進程中獲得不同的數字,您應該確保每個進程都獲得唯一的種子值。 實現這一點的最簡單方法是將計數器i
添加到時間值:
srand(i + time(NULL));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.