История изменений
Исправление 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;
}
Так ты повысишь разрешение времени и два процесса запускаемые друг за другом не будут получать одно и тоже зерно в секундах с которого начнётся генерация случайного числа.