Far*_*zad 1 c++ random multithreading c++11
我尝试使用rand()函数在多线程C++程序中的每个线程中创建随机数.当我增加线程数时,我最终得到了更糟糕的结果.感谢这篇文章,我发现因为它需要跟踪状态,rand()每次调用都会使用一个锁.
使用C++ 11随机库(这个用法作为例子)是否执行相同的过程,如果我使用它,我应该期待相同的观察?或者C++ 11可以提供一种方法吗?
是的,不是.大多数C++ 11随机数生成器都是封装自己状态的对象,因此只要为每个线程创建一个单独的生成器对象,每个都应该能够独立于其他生成器运行(因此您不需要任何生成器)锁定).
具体情况std::random_device虽然有点不同:这是为了(但不能保证)从某种随机数生成硬件获得真正的非确定性数据.该设备的驱动程序可能会强加其自身的锁定要求 - 并且它通常也是相当低的带宽,因此如果您想快速获得大量数字,通常是一个糟糕的选择.
在典型情况下,您希望std::random_device每个线程使用一个生成器(除了),并且std::random_device仅用于为其他生成器提供初始种子.这可能会在初始化期间强制执行锁定,但随后允许每个线程生成其随机数,而不与其他线程互锁.
| 归档时间: |
|
| 查看次数: |
994 次 |
| 最近记录: |