gpt4 book ai didi

c++ - 使用 C++11 随机库在多线程中生成随机数是否像在多线程中使用 rand() 一样慢?

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:06 25 4
gpt4 key购买 nike

我尝试使用 rand() 函数在多线程 C++ 程序中的每个线程中创建随机数。随着线程数量的增加,我最终得到了更糟糕的结果。感谢this post ,我发现因为它需要跟踪状态,所以 rand() 对每次调用都使用锁。
使用 C++11 随机库(以 this usage 为例)是否执行相同的过程,如果我使用它,我应该期待相同的观察结果吗?或者 C++11 可以提供解决方法?

最佳答案

是也不是。大多数 C++11 随机数生成器都是封装自己状态的对象,因此只要为每个线程创建一个单独的生成器对象,每个线程都应该能够独立于其他生成器运行(因此您不需要任何锁定)。

std::random_device 的具体情况略有不同:这是为了(但不保证)从某种随机数生成硬件中获取真正不确定的数据。该设备的驱动程序很可能会强加自己的锁定要求——而且它的带宽通常也相当低,因此如果您想快速获取大量数字,这通常是一个糟糕的选择。

在典型情况下,您希望每个线程使用一个生成器(std::random_device 除外),并且仅使用 std::random_device 来提供初始其他发电机的种子。这可能会在初始化期间施加锁定,但随后允许每个线程生成其随机数,而无需与其他线程进行任何互锁。

关于c++ - 使用 C++11 随机库在多线程中生成随机数是否像在多线程中使用 rand() 一样慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24007263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com