On 31 January 2015 at 18:30, Zheng Da wrote: | I'm writing an R extension in C++. In the extension, I want to invoke | an R function directly and it works when I use Rcpp in the serial | code. But what I really want is to invoke the R function in parallel | with openmp. When I do so, I got segmentation fault. | | I remember someone said that R isn't thread-safe. I think it's also | understandable because an R function also has environment variables. | | My question is: | Can we make a copy of an R function (including its environment | variables) for each thread?
Nope. And you pretty much just explained why. You can - either work in something like OpenMP and run in multiple threads that remain /completely/ shielded from R, ie no R calls, and not even R data types as you cannot trigger gc() calls from different threads - or work via, say, the parallel or Rmpi packages in multiple _processes_ each of which could call its corresponding R interpreter (but that is still slower). There are some examples for OpenMP at the Rcpp Gallery: http://gallery.rcpp.org. You may also enjoy the RcppParallel package. But none of this overcomes your main hurdle: no, you cannot call R from different threads. | Are there any ways to invoke an R function in C/C++ in multiple threads safely? No. It is a design constraint. Dirk -- http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel