簡體   English   中英

rand() 與 fork() 一起使用時生成相同的數字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM