线程安全随机数
Thread safe random numbers
我试图以并行方式实现"蒙特卡罗"算法,因此我需要使用线程安全版本的随机数生成器
我找了很多,终于找到了int qrand ()
它是标准C++rand()
函数(在<cstdlib>
和<stdlib.h>
中定义)的线程安全版本。当我使用它时,VS引发了"找不到标识符"错误。
我使用MS visual studio‘10,并使用OMP用C++编写代码。
有什么帮助吗?
对于C++,请使用标准<random>
库。正如James Kanze所建议的,为每个线程使用不同的生成器可能是最好的,而且它们并不难制作:
#include <random>
std::mt19937 make_seeded_engine() {
std::random_device r;
std::seed_seq seed{r(), r(), r(), r(), r(), r(), r(), r()};
return std::mt19937(seed);
}
std::async([](){
auto rand = std::bind(std::uniform_real_distribution<>(),
make_seeded_engine());
for(int i = 0; i < 100; ++i)
rand();
});
我只是使用std::async()
来展示生成器是在线程中创建的。我不认为MSVC 10没有std::async()
,但它确实有<random>
,所以只要使用已经使用的任何线程库,就可以做同样的事情。
boost::random
有许多作为对象的生成器。这个最简单的解决方案是简单地为每个线
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 整数不会重复超过随机数
- 虚拟决赛作为安全
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将元素添加到数组的线程安全函数?
- C++中的线程安全删除
- 通过网络、跨平台传递std::变体是否安全
- 在std::thread中,joinable()然后join()线程安全吗
- 使用std::istream::peek()总是安全的吗
- if数组上的随机数
- 从值小于256的uint16到uint8的Endian安全转换
- C++ 生成线程安全随机数
- GSL+OMP:C++中的线程安全随机数生成器
- 如何改进代码以生成安全的随机数
- Qt/C++(跨平台)中加密安全的伪随机数生成器
- 线程安全随机数
- C++是线程安全的伪随机数生成器
- 在Intel TBB函数对象中生成线程安全随机数(相同种子/不同种子)