Случайное семя в миллисекундах в Windows и Linux - PullRequest
3 голосов
/ 05 сентября 2010

Мне нужно запустить генератор случайных чисел в boost (который загружается из int) для нескольких процессов, для программы, которая должна компилироваться и работать как в Windows, так и в Linux.

Я использовал std:time(0), который работал, но поскольку процессы - это задания, которые выполняются одновременно, некоторые из них будут выполняться в одну и ту же секунду, производя одинаковые результаты.

Поэтому мне нужноотобрать его за миллисекунды или любой другой кросс-платформенный генератор случайных чисел.Я попытался clock(), но не смог преобразовать его из time_t в int.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 05 сентября 2010

Вам, вероятно, лучше всего использовать источник случайных чисел для конкретной платформы. В Linux используйте /dev/urandom и прочитайте несколько байтов. В Windows простой способ получения нескольких байтов энтропии - UuidCreate.

0 голосов
/ 05 сентября 2010

Если вы запускаете все задания одним скриптом.

Тогда вы можете передать увеличенное число в качестве аргумента в командной строке. Каждое задание затем добавляет это значение к результату time (), чтобы сгенерировать его начальное число.

Примечание: я не вижу никаких требований в ОП по безопасности.
Исходный код использует время (NULL), и это будет иметь предполагаемое начальное число.

int main(int argc,char* argv[])
{
    srand(time(NULL) + boost::lexical_cast<int>(argv[1]));

    // STUFF
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...