У меня есть следующий код, который я написал для проверки части более крупной программы:
#include <fstream>
#include <random>
#include <iostream>
using namespace std ;
int main()
{
mt19937_64 Generator(12187) ;
mt19937_64 Generator2(12187) ;
uniform_int_distribution<int> D1(1,6) ;
cout << D1(Generator) << " " ;
cout << D1(Generator) << " " << D1(Generator) << endl ;
cout << D1(Generator2) << " " << D1(Generator2) << " " << D1(Generator2) << endl ;
ofstream g1("g1.dat") ;
g1 << Generator ;
g1.close() ;
ofstream g2("g2.dat") ;
g2 << Generator2 ;
g2.close() ;
}
Два генератора засеяны одним и тем же значением, поэтому я ожидал, что вторая строка на выходе будет идентична первой. Вместо этого вывод
1 1 3
1 3 1
Состояние двух генераторов, напечатанных в файлах *.dat
, одинаковое. Мне было интересно, может ли быть какая-то скрытая многопоточность в генерации случайных чисел, вызывающая несоответствие порядка.
Я скомпилировал с g++
версии 5.3.0, в Linux, с флагом -std=c++11
.
Заранее благодарим за помощь.