2015-02-12 42 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。

​​

感謝德克