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