2015-02-12 43 views
0

我试图从多个线程中进行RInside调用,并且遇到此错误。多线程使用一个RInside实例

terminate called after throwing an instance of 'std::runtime_error' 
what(): Error evaluating: qnorm(.65, mean=0,sd=1) 

的代码行导致此是:

//within main.cpp// 
std::shared_ptr<RInside> R = std::make_shared<RInside>(); 

//within some_class::some_function(std::shared_ptr<RInside> R)// 
double value = Rcpp::as<double>(R->parseEval("qnorm(.65, mean=0,sd=1)")); 

R是正被80个+线程之间共享一个std :: shared_ptr的。
我假设这个问题是一个锁定的问题,因为RInside实例忙于执行第一parseEval当另一个用武之地。

难道我就在我的假设? 谢谢!

+1

这在已详细讨论之前:你根本就没有围绕R.一个多线程的上下文 – 2015-02-12 02:48:30

+0

谢谢。我会让所有R接口顺序。 – 2015-02-12 03:35:59

+1

如果你去多个_process_你可以使事情工作。 “mpi /'子目录中最早提供的示例之一。 – 2015-02-12 03:42:00

回答

0

想出了一个RInside实例的轻量级包装器。让多个线程安全地使用实例。将返回使用类型和模板化参数更改为Rcpp :: as <>,并将其与shared_ptr一起传递给RInside_Container。

​​

感谢德克