我正在尝试从多个线程中进行一次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是一个std :: shared_ptr,它在80 +线程之间共享 我假设这个问题是一个锁定问题,因为当另一个实例进入时,RInside实例正忙于执行第一个parseEval。
我的假设是对的吗? 谢谢!
答案 0 :(得分:0)
为RInside实例提供了一个轻量级的包装器。允许多个线程安全地使用该实例。将使用的返回类型和模板化参数更改为Rcpp :: as&lt;&gt;,并使用shared_ptr传递RInside_Container。
class RInside_Container{
double use(string command_to_execute){
mtx.lock();
double value = Rcpp::as<double>(R.parseEval(command_to_execute));
mtx.unlock();
return value;
}
Rinside R{};
std::mutex mtx;
};
谢谢Dirk