代码之家  ›  专栏  ›  技术社区  ›  huseyin tugrul buyukisik

std::random_设备是否受g++实例数的限制?

  •  0
  • huseyin tugrul buyukisik  · 技术社区  · 7 年前

    此代码块

      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)
    

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

    rdThread 是(共享的)随机设备向量。

    rngThread

    distThread 是均匀实分布的向量。

    在多线程部件中,所有这些都可以在不到2000个项的情况下正常工作,但此错误仅出现在该初始化块上。

    • g++(Ubuntu 5.4.1-2ubuntu1~16.04)5.4.1
    • C++ 1Y方言
    • 优化O3开启
    • -m64-mtune=包含通用编译选项
    0 回复  |  直到 7 年前
    推荐文章