c++ - QuantLib 多线程/并发

标签 c++ multithreading concurrency quantlib

我对 QuantLib 还很陌生,还不知道源代码的所有来龙去脉,但我试图测试几个选项的 NPV 的简单多线程计算,但遇到了运行时错误。这是我的测试代码,它刚刚从 QL 附带的 EquityOpiton 示例扩展而来。

// options
VanillaOption europeanOption(payoff, europeanExercise);
VanillaOption bermudanOption(payoff, bermudanExercise);
VanillaOption americanOption(payoff, americanExercise);

boost::thread_group worker_threads;
for( int x = 0; x < 3; ++x )
{
     switch (x)
     {
     case 0:
        europeanOption.setPricingEngine(boost::shared_ptr(
           new FDEuropeanEngine(bsmProcess,
                                                100,99)));
        worker_threads.create_thread( boost::bind( &VanillaOption::NPV, &europeanOption ) );
     case 1:
        bermudanOption.setPricingEngine(boost::shared_ptr(
          new FDBermudanEngine(bsmProcess,
                                                100,99)));
        worker_threads.create_thread( boost::bind( &VanillaOption::NPV, &bermudanOption ) );
     case 2:
       americanOption.setPricingEngine(boost::shared_ptr(
         new FDAmericanEngine(bsmProcess,
                                                100,99)));
        worker_threads.create_thread( boost::bind( &VanillaOption::NPV, &americanOption ) );
      default:
        break;
  }
}


worker_threads.join_all();

到底是什么导致了这些运行时错误,我该如何解决?我猜它与共享指针有关,但我注意到它们在整个 QL 中被大量使用,我不确定是哪个(些)导致了这个问题。

最佳答案

您似乎忘记在每个案例后添加中断。尝试以下

 switch (x)
 {
 case 0:
 {
    europeanOption.setPricingEngine(boost::shared_ptr(
       new FDEuropeanEngine(bsmProcess, 100,99)));
    worker_threads.create_thread( boost::bind( &VanillaOption::NPV, &europeanOption )  );
    break;
 }
 case 1:
 {
    opt = &bermudanOption;
    bermudanOption.setPricingEngine(boost::shared_ptr(
      new FDBermudanEngine(bsmProcess,
                                            100,99)));
    worker_threads.create_thread( boost::bind( &VanillaOption::NPV, &bermudanOption ) );
    break;
 }
 case 2:
 {
   americanOption.setPricingEngine(boost::shared_ptr(
     new FDAmericanEngine(bsmProcess,
                                            100,99)));
    worker_threads.create_thread( boost::bind( &VanillaOption::NPV, &americanOption ) );
    break;
  }
  default:
    break;
 }

关于c++ - QuantLib 多线程/并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16612816/

相关文章:

c++ - 碰撞检测和时间复杂度 : How do I make checking for collisions easier?

java - Java线程是在用户空间还是内核空间创建的?

java - 当文档不在工作集中时,使用 upsert 和唯一索引原子性进行 MongoDB 更新

java - 创建一个运行在定时器上但可以随时被唤醒的java线程

c++ - make文件没有运行给出错误请帮助我

c++ - 将变量传递给 lambda

multithreading - Future::spawn() 有点没用?我怎样才能多线程呢?

c# - 这是状态消息显示的最佳方式吗?

c++ - C++ std::mutex 如何绑定(bind)到资源?

c++ - 考虑到我有一个引用该控件的 CWnd 对象,有没有办法获取对 MFC 对话框上所有子窗口或控件的引用?