1
저는 QuantLib을 처음 접했지만 소스의 모든 기능을 아직 알지 못했습니다. 그러나 여러 옵션의 NPV를 계산하는 간단한 멀티 스레드를 테스트하고 런타임 오류가 발생했습니다. 다음은 QL에 포함 된 EquityOpiton 예제에서 확장 된 테스트 코드입니다.QuantLib 멀티 쓰레딩/Concurrecy
// 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 전체에서 상당히 많이 사용되어 주목을 받았고 어떤 것이 문제를 일으키는 지 잘 모르겠습니다.
derp 당신은 그것을 얻었습니다. 그것은 그 트릭을했습니다 ... 고맙습니다. – user2183336
@ user218336 여러분을 환영합니다. 왼쪽에있는 위쪽 삼각형을 클릭하면 유용한 답변을 upvote 할 수 있습니다. (이것은 가장 유용한 답을 표시하는 것 외에 사용할 수 있습니다.) –