我正在用C ++写一些库代码,我需要生成一些随机数。 我创建了下面的函数来生成每个线程生成器,并使用来自std :: random_device的数据对其进行初始化。如果我在单线程环境中调用它,那么一切似乎都可以正常工作。但是,如果同时调用它,我似乎会得到重复的元素。
inline std::mt19937_64& initialize_mt_generator() {
constexpr size_t state_size = std::mt19937_64::state_size *
std::mt19937_64::word_size / 32;
std::vector<uint32_t> random_data(state_size);
thread_local std::random_device source{};
std::generate(random_data.begin(), random_data.end(), std::ref(source));
thread_local std::seed_seq seeds(random_data.begin(), random_data.end());
thread_local static std::mt19937_64 engine(seeds);
return engine;
}
此函数的使用方式是在一个库中,该库用于创建Python扩展。并行代码完全在Python中使用了多处理模块。我不确定这是否会一直持续下去。