如何定义具有不同种子的随机引擎向量
How to define a vector of random engines with different seeds?
因为我使用多线程,所以我需要定义多个随机引擎,每个线程一个。
如果我知道有4个线程,我会这么做:
std::default_random_engine generator1(1);
std::default_random_engine generator2(10000);
std::default_random_engine generator3(20000);
std::default_random_engine generator4(30000);
std::vector<std::default_random_engine> generators =
{generator1, generator2, generator3, generator4};
但是如何处理任意数量的线程呢?很抱歉,如果这是显而易见的,我不熟悉C/C++。
编辑
嗯,也许
std::vector<std::default_random_engine> generators(n);
for(i = 0; i < n; i++) {
std::default_random_engine generator(seeds[i]);
generators[i] = generator;
}
您给出的示例似乎适用于编译器资源管理器。这里的函数变成了一个函数,每个CPU生成一个生成器和线程,并使用C++20将生成器赋予lambda。
#include <vector> // std::vector
#include <random> // std::default_random_engine
#include <thread> // std::thread
#include <cstdint> // std::size_t
#include <ranges> // std::ranges
#include <functional> // std::ref
void foo() {
auto exec = [](std::default_random_engine &random) {
return random();
};
std::vector<std::default_random_engine> generators;
std::vector<std::thread> threads;
const std::size_t concurrency = std::max(1u, std::thread::hardware_concurrency());
threads.reserve(concurrency);
generators.reserve(concurrency);
for (const auto & i : std::ranges::views::iota(0u,concurrency) )
{
generators.emplace_back(i * 1000);
threads.emplace_back(exec, std::ref(generators.back()));
}
for (auto & t : threads )
{
t.join();
}
} // void foo()
相关文章:
- 如何使用要传递给 mt19937 的可选随机种子参数设计函数
- 如何使用可选的随机种子参数创建 roll_die() 函数
- 除了 rand() 之外,是否有任何随机生成器库,开发人员可以手动设置种子?
- 如果我在每个平台上使用相同的种子,随机结果会相同吗?
- 随机化种子值C
- 为什么使用迭代器时必须重新设定随机生成器种子?
- 在给定种子和偏移量的情况下生成下一个伪随机值
- 设置随机种子独立rmath库
- 与C++2011不相关的并行随机种子
- 我应该使用从std::random_device种子的随机引擎,还是每次都使用std::random_device
- 如何生成随机种子/哈希以使Rand实际上是随机的
- 生成一个随机种子给srand()-不是时间(NULL)
- 在哪里初始化随机种子以通过多个随机模块使用
- 为什么起始值会影响种子随机的结果
- 更改程序 C++ 中的随机种子
- C++麦克风输入作为随机种子
- 使用srand作为随机种子时出现重复输出
- 随机生成器,种子不工作
- 多精度随机生成器种子错误
- 在伪随机生成器中使用常量种子从UT和GUI中获得不相同的数字