Сообщение Boost.random и потокобезопасность от 15.01.2018 22:00
Изменено 15.01.2018 22:01 prrt
Boost.random и потокобезопасность
Как известно, boost::random не является thread safe.
Тогда если глобально есть
И из разных потоков одновременно очень часто вызывать
ccode]
uint32_t randVal = gen();
[/ccode]
то что может произойти?
Я вижу 2 опасности:
1) Для одновременных вызовов всегда будут сгенерированы одинаковые значения;
2) Произойдет undefined behaviour и вызов либо "зависнет", либо вывалится с segmentation fault.
Моя задача — с максимальной производительностью получать псевдо-случайные числа от gen.min() до gen.max(), качество чисел не важно. Поэтому без нужны закрывать мьютексом не хотелось бы.
Тогда если глобально есть
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.
Тогда если глобально есть
И из разных потоков одновременно очень часто вызывать
то что может произойти?
Я вижу 2 опасности:
1) Для одновременных вызовов всегда будут сгенерированы одинаковые значения;
2) Произойдет undefined behaviour и вызов либо "зависнет", либо вывалится с segmentation fault.
Моя задача — с максимальной производительностью получать псевдо-случайные числа от gen.min() до gen.max(), качество чисел не важно. Поэтому без нужны закрывать мьютексом не хотелось бы.
Тогда если глобально есть
boost::random::mt19937 gen(42);
И из разных потоков одновременно очень часто вызывать
uint32_t randVal = gen();
то что может произойти?
Я вижу 2 опасности:
1) Для одновременных вызовов всегда будут сгенерированы одинаковые значения;
2) Произойдет undefined behaviour и вызов либо "зависнет", либо вывалится с segmentation fault.
Моя задача — с максимальной производительностью получать псевдо-случайные числа от gen.min() до gen.max(), качество чисел не важно. Поэтому без нужны закрывать мьютексом не хотелось бы.