对于每个线程,random_device是否以不同的状态启动?

Does random_device start at a different state for each thread?

本文关键字:状态 启动 是否 线程 于每个 random device      更新时间:2023-10-16

是否可以保证每个新线程random_device不会以相同的内部状态启动?以便以下代码可能会给出两个不同的值?

#include <iostream>
#include <random>
#include <thread>
#include <mutex>
using namespace std;
int main()
{
auto thr = []()
{
static mutex mtx;
mtx.lock();
cout << random_device()() << " " << endl;
mtx.unlock();
};
thread t1( thr );
thread t2( thr );
t1.join();
t2.join();
}

没有这样的保证。

关于cpp偏好,我们可以阅读

std::random_device 可以在实现定义的伪随机数引擎方面实现,如果非确定性源(例如硬件设备(对实现不可用。在这种情况下,每个 std::random_device 对象可能会生成相同的编号序列。

这基本上取决于实现。

另一件事是创建新random_device存在性能成本,最好重复使用相同的。

auto thr = []()
{
static mutex mtx;
static random_device rd{};
mtx.lock();
cout << rd() << " " << endl;
mtx.unlock();
};