2016-04-25 209 views
0

我想讓一個變量(屬於一個進程)得到一個新的隨機值,每次新進程啓動時。Linux中的進程:讓每個子進程進入休眠狀態隨機秒數

我需要這個隨機世代,使每個進程創建睡眠的隨機數秒。在程序開始時,我使用了 srand(time(NULL)),並且在該程序運行的功能中我使用了

int sleeptime = rand() % 16 + 5; //that's because I need values from 5 to 20

我試圖實現這樣的事情,但我看到,對於每個過程變量的值是相同的。

我認爲如果我把srand(..)作爲當前時間的參數(以毫秒爲單位),我會得到隨機值。問題是我沒有找到任何有關這方面的信息。在不同頁面上建議的唯一一件事是衆所周知的:srand(time(NULL));(其中time(NULL)以秒爲單位返回當前時間)。

你可以,請告訴我一些方法來實現這一點?先謝謝你。

+1

由於所有的過程在同一時間開始,他們很可能都調用'srand'具有相同的時間,因此得到相同的隨機數(S)從'rand'回來。 'srand'你需要更好的隨機化來源。 –

+1

在這裏我找到了一個解決方案: http://stackoverflow.com/questions/8623131/why-is-rand-not-so-random-after-fork –

回答

1

如果你在linux上,你也可以從/dev/random中讀取PRNG。事情是這樣的:

void seedprng() { 
    unsigned i; 
    FILE* f = open("/dev/random", "rb"); 
    if (f) { 
     fread(&i, sizeof(i), 1, f); 
     fclose(f); 
     } 
    else{ 
     printf("falling back to time seeding\n"); 
     i = (unsigned)time(NULL); 
     } 
    srand(&i) 
    } 
相關問題