0

新しいプロセスが開始されるたびに、(プロセスに属する) 変数に新しいランダム値を取得させたいと思います。

作成されたすべてのプロセスをランダムな秒数スリープさせるには、このランダム生成が必要です。私が使用したプログラムの最初に srand(time(NULL))、およびプロセスが実行する関数で使用しました

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

そのようなことを実装しようとしましたが、すべてのプロセスで変数の値が同じであることがわかりました。

srand(..) の引数としてミリ秒単位の現在の時刻 (それぞれのプロセスが開始される時刻) を取得すると、ランダムな値が得られると思います。問題は、これに関する情報が見つからなかったことです。別のページで提案されている唯一のことは、よく知られているものです: srand(time(NULL));(ここで、time(NULL) は現在の時刻を秒単位で返します)。

これを実装する方法を教えてください。前もって感謝します。

4

1 に答える 1

1

Linux を使用している場合は、から読み取ることで PRNG もシードします/dev/random。このようなもの:

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)
    }
于 2016-04-25T20:57:45.680 に答える