Информация об изменениях

Сообщение Boost.random и потокобезопасность от 15.01.2018 22:00

Изменено 15.01.2018 22:01 prrt

Boost.random и потокобезопасность
Как известно, boost::random не является thread safe.
Тогда если глобально есть
boost::random::mt19937 gen(42);

И из разных потоков одновременно очень часто вызывать
ccode]
uint32_t randVal = gen();
[/ccode]

то что может произойти?

Я вижу 2 опасности:
1) Для одновременных вызовов всегда будут сгенерированы одинаковые значения;
2) Произойдет undefined behaviour и вызов либо "зависнет", либо вывалится с segmentation fault.

Моя задача — с максимальной производительностью получать псевдо-случайные числа от gen.min() до gen.max(), качество чисел не важно. Поэтому без нужны закрывать мьютексом не хотелось бы.
Boost.random и потокобезопасность
Как известно, boost::random не является thread safe.
Тогда если глобально есть
boost::random::mt19937 gen(42);

И из разных потоков одновременно очень часто вызывать
uint32_t randVal = gen();


то что может произойти?

Я вижу 2 опасности:
1) Для одновременных вызовов всегда будут сгенерированы одинаковые значения;
2) Произойдет undefined behaviour и вызов либо "зависнет", либо вывалится с segmentation fault.

Моя задача — с максимальной производительностью получать псевдо-случайные числа от gen.min() до gen.max(), качество чисел не важно. Поэтому без нужны закрывать мьютексом не хотелось бы.