LINUX.ORG.RU

Посоветую несколько генераторов случайных чисел.

intelfx ★★★★★
()

Читай /dev/urandom.

x3al ★★★★★
()

А чем плохо использовать Mersenne Twister в разных потоках по отдельности? Действительно интересно, а то в статье в википедии не нашел ничего, что бы запрещало его использовать в нескольких потоках.

lu4nik ★★★
()

Я бы посоветовал просто организовать запрос к твоему любимому, через очередь. Пусть он в одном потоке генерирует чанками размера n, а в других эта очередь разбирается. Если прямо дробилка дробилка, то можно сделать очередь на интристиках.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Я бы посоветовал просто организовать запрос к твоему любимому, через очередь.

Нифига себе, просто. Просто это взять какой-нибудь Mersenne Twister

mashina ★★★★★
()

Если не хочешь /dev/urandom читать, то тупо заведи отдельный поток ГСЧ через lrand48 — та же фигня получится, но шустрей.

anonymous
()

Делай rdtsc и хешируй.

anonymous
()
Ответ на: комментарий от vzzo

Лень искать пруфы, но вот...

А как на счёт продолжения борьбы с ленью, не хочешь ли сам прочитать что по ссылке написано?

mashina ★★★★★
()

Написать свою функцию, в которой использовать mutex при вызове любого генератора случайных чисел. Ниже пример из MathGL

double MGL_EXPORT mgl_rnd()
{
#if MGL_HAVE_PTHREAD
	pthread_mutex_lock(&mutexRnd);
#endif
	double res;
#pragma omp critical(rnd)
	{
#if MGL_HAVE_GSL
		if(mgl_rng==0)
		{
			gsl_rng_env_setup();
			mgl_rng = gsl_rng_alloc(gsl_rng_default);
			gsl_rng_set(mgl_rng, time(0));
		}
		res = gsl_rng_uniform(mgl_rng);
//		gsl_rng_free(r);
#else
		res = rand()/(RAND_MAX-1.);
#endif
	}
#if MGL_HAVE_PTHREAD
	pthread_mutex_unlock(&mutexRnd);
#endif
	return res;
}

abalakin ★★
()

Тебе какая скорость генерации нужна и на каком железе?

post-factum ★★★★★
()
man initstate_r

random_r, srandom_r, initstate_r, setstate_r - reentrant random number generator

И на каждый тред свой генератор

zaz ★★★★
()

intelfx правильно посоветовал. Заведи по генератору на поток с разными сидами и не парься.

anonymous
()

getrandom()

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.