在g ++上,std :: random_device是否受实例数量限制?

时间:2018-09-20 10:11:47

标签: c++ random g++ mt19937

此代码块

  try
  {
    for(int i=0;i<N;i++)
    {
        std::shared_ptr<std::random_device> tmp=std::shared_ptr<std::random_device>(new std::random_device);
        rdThread.push_back(tmp);
        rngThread.push_back(std::mt19937((*rdThread[rdThread.size()-1])()));
        distThread.push_back(std::uniform_real_distribution<T>(0,1));
    }
  }
  catch(std::exception & ex)
  {
      std::cout<<ex.what()<<std::endl;
  }
当N为2000或类似的高值时,

会产生异常。运行时异常的错误消息是:

random_device::random_device(const std::string&)
Segmentation fault (core dumped)

我找不到错误是否与random_device使用的某些std :: string或此数字生成器的gcc内部限制有关。但是push_back进入向量或在下一个push_back中取消引用似乎正在以某种方式使用它。

编译器是否可能不支持数千个随机数生成器?

rdThread是(shared_ptr)random_device向量。

rngThread是mt19937的向量。

distThread是均匀实分布的向量。

在多线程部分中,所有的工作都少于2000个项目,但是此错误仅在此初始化块上出现。

  • g ++(Ubuntu 5.4.1-2ubuntu1〜16.04)5.4.1
  • 启用了C ++ 1y方言
  • 优化O3已启用
  • -m64 -mtune =包含通用编译选项

0 个答案:

没有答案