Mat*_*son 4 c++ random multithreading
笔者近日了解到硬盘的方式是#<cstdlib> rand()
不是线程安全的,并在Linux上与互斥实现,造成了瓶颈时,rand()
由多个线程频繁调用.rand_r
作为替代,但有人担心随机数生成的质量.此外,这种情况让我怀疑是否有更快的随机数生成器,因为显然我的代码花了很多时间生成随机数.上面的链接中列出了一些替代方案,但我不确定它们的速度以及可能存在的其他替代方案.
Ker*_* SB 11
如果您不需要跨线程进行任何统计控制,只需使用以下提供的工具<random>
:
#include <random>
typedef std:::mt19937 rng_type;
std::uniform_int_distribution<rng_type::result_type> udist(0, 200);
int main() // this can be per thread!
{
rng_type rng;
// seed rng first:
rng_type::result_type const seedval = get_seed();
rng.seed(seedval);
rng_type::result_type random_number = udist(rng);
return random_number;
}
Run Code Online (Sandbox Code Playgroud)
Mersenne twister PRNG速度快,具有良好的统计特性.在每个线程中维护一个单独的(和单独播种的)引擎对象可以避免所有并发问题.