访问/设置Rcpp :: List线程中的元素是否安全?

时间:2016-07-30 01:54:57

标签: r rcpp

我想在列表列表中执行Rcpp中有效并行的内容,有效地从列表中删除/删除元素并使用它们进行计算。 基本上做Rcpp并行做什么,但用列表而不是数字向量。在Rcpp中如果通过数字索引完成/设置列表元素线程安全吗?

我想在下面做的事情的伪代码:

List original = // created somewhere else, 
List results = List(original.size());

// Is this function thread safe?
auto func = [original&, results&](int i) {
    List data = original[i];
    // Calculate a new List, stuff
    results[i] = stuff;
 };

```

1 个答案:

答案 0 :(得分:3)

你问

  

在Rcpp中,如果通过数字索引完成/设置列表元素线程安全吗?

答案是(通常)公司"否"因为(给予或接受)没有关于R和R数据结构的是。

请参阅有关使用包含Writing R Extensions的R的OpenMP的现有说明 - 在第1.2.1.1节中明确指出

  

从线程代码调用任何R API是“仅限专家”:他们需要阅读源代码以确定它是否是线程安全的。特别是,不得从线程代码中调用使用堆栈检查机制的代码。

另请参阅我们的Rcpp Gallery on OpenMP以及RcppParallel及其示例的详细文档。