LINUX.ORG.RU

История изменений

Исправление LINUX-ORG-RU, (текущая версия) :

Вот она и проблема, srand инициализируется секундами, и за 1 секунду несколько раз несколько процессов получают одинаковую точку отсчёта. Уже выше сказали что можно не секунды взять для инициализации зерна, а наносекунды например.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])
{
    struct timespec t;
    clock_gettime(CLOCK_REALTIME, &t);
    srand(t.tv_nsec);

    printf("%zu\n",random());

    return 0;
}

Так ты повысишь разрешение времени и два процесса запускаемые друг за другом не будут получать одно и тоже зерно в секундах с которого начнётся генерация случайного числа.

Но если твой CGI прям вжухх быстрый там различия будут в десяток наносекунд и всё… Я фиг знаю пойдёт или нет такое. В смысле нужна ли большая разница в случайных значениях или нет. Опять же на правах мыслей вслух если чво :3

Исправление LINUX-ORG-RU, :

Вот она и проблема, srand инициализируется секундами, и за 1 секунду несколько раз несколько процессов получают одинаковую точку отсчёта. Уже выше сказали что можно не секунды взять для инициализации зерна, а наносекунды например.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])
{
    struct timespec t;
    clock_gettime(CLOCK_REALTIME, &t);
    srand(t.tv_nsec);

    printf("%zu\n",random());

    return 0;
}

Так ты повысишь разрешение времени и два процесса запускаемые друг за другом не будут получать одно и тоже зерно в секундах с которого начнётся генерация случайного числа.

Но если твой CGI прям вжухх быстрый там различия будут в десяток наносекунд и всё… Я фиг знаю пойдёт или нет такое. В смысле нужна ли большая разница в случайных значениях или нет.

Исправление LINUX-ORG-RU, :

Вот она и проблема, srand инициализируется секундами, и за 1 секунду несколько раз несколько процессов получают одинаковую точку отсчёта. Уже выше сказали что можно не секунды взять для инициализации зерна, а наносекунды например.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])
{
    struct timespec t;
    clock_gettime(CLOCK_REALTIME, &t);
    srand(t.tv_nsec);

    printf("%zu\n",random());

    return 0;
}

Так ты повысишь разрешение времени и два процесса запускаемые друг за другом не будут получать одно и тоже зерно в секундах с которого начнётся генерация случайного числа.

Но если твой CGI прям вжухх быстрый там различия будут в десяток наносекунд и всё… Я фиг знаю пойдёт или нет такое.

Исходная версия LINUX-ORG-RU, :

Вот она и проблема, srand инициализируется секундами, и за 1 секунду несколько раз несколько процессов получают одинаковую точку отсчёта. Уже выше сказали что можно не секунды взять для инициализации зерна, а наносекунды например.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])
{
    struct timespec t;
    clock_gettime(CLOCK_REALTIME, &t);
    srand(t.tv_nsec);

    printf("%zu\n",random());

    return 0;
}

Так ты повысишь разрешение времени и два процесса запускаемые друг за другом не будут получать одно и тоже зерно в секундах с которого начнётся генерация случайного числа.