簡體   English   中英

Linux中的進程:讓每個子進程進入隨機的秒數

[英]Processes in Linux: Getting every child process to sleep a Random number of seconds

每當新進程啟動時,我想使一個變量(屬於某個進程)獲得一個新的隨機值。

我需要這種隨機生成,以使創建的每個進程隨機進入睡眠秒數。 在程序開始時,我使用了srand(time(NULL)) ,在該過程將要運行的函數中,我使用了

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

我已經嘗試實現這樣的事情,但是我發現對於每個進程,變量的值都是相同的。

我認為,如果我以srand(..)作為當前時間(以毫秒為單位)(各個過程開始的時間)作為參數,我將獲得隨機值。 問題是我沒有為此找到任何信息。 在不同頁面上建議的唯一內容是眾所周知的: srand(time(NULL)); (其中time(NULL)返回當前時間,以秒為單位)。

能否請您建議我一些實施此方法的方法? 先感謝您。

如果您使用的是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)
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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