Я бы хотел многопоточность моей rng-части моего кода, используя C ++ 11.
Я создаю группу RNG, как это:
typedef std::mt19937 mersenne_twister;
typedef std::uniform_real_distribution<double> unidist;
// 8 rng engines with 8 consecutive seeds
const size_t Nrng = 8;
const array<uint32_t,Nrng> seed_values = {0,1,2,3,4,5,6,7};
array<mersenne_twister,Nrng> engines;
const array<unidist,Nrng> distributions; // default constructor is for [0,1] interval
const array<????,Nrng> rngs; // What type do I put here?
for( size_t i=0; i<Nrng; ++i )
engines[i].seed(seed_values[i]);
rngs[i] = std::bind(distributions[i], engines[i]);
С идеей я могупозже передайте каждый из объектов ГСЧ в отдельный std::thread
, который заполняет другой array
некоторой формой случайных чисел, используя предоставленный генератор.Я не знаю, какой тип мне нужно использовать для rng array
.Я знаю, как создать один rng, вот так:
auto rng = std::bind(unidist, generator);
, но мне нужно явно иметь тип (decltype
d?) Для array
.