我想在列表列表中执行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;
};
```
答案 0 :(得分:3)
你问
在Rcpp中,如果通过数字索引完成/设置列表元素线程安全吗?
答案是(通常)公司"否"因为(给予或接受)没有关于R和R数据结构的是。
请参阅有关使用包含Writing R Extensions的R的OpenMP的现有说明 - 在第1.2.1.1节中明确指出
从线程代码调用任何R API是“仅限专家”:他们需要阅读源代码以确定它是否是线程安全的。特别是,不得从线程代码中调用使用堆栈检查机制的代码。
另请参阅我们的Rcpp Gallery on OpenMP以及RcppParallel及其示例的详细文档。