首页 > 解决方案 > 使用 Rcpp 时抛出错误的线程安全方法是什么

问题描述

RcppThread在函数中使用并行Rcpp性。在并行循环中间抛出错误的首选方法是什么?R 的 API 是单线程的,所以我认为Rcpp::stop()它不是线程安全的。RcppThread提供线程安全的方法coutCheckUserInterrupt但据我所知,不是线程安全的stop

我正在尝试做的一个例子:

#include <RcppThread.h>
// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::depends(RcppThread)]]

void myfun() {

  // parallel loop
  RcppThread::parallelFor(0, 100, [](int j){
    // do something that causes an error
    Rcpp::stop("Is this error unsafe?");
  });

}

标签: multithreadingrcpp

解决方案


可能不会——例如在 RcppParallel 文档中陈述的简单且经常重复的规则是,不应从多线程代码返回到 R 或与 R 创建/拥有的内存进行任何联系。

从头顶上,我只想

  • 从并行循环中中断
  • 将错误条件或文本分配给字符串
  • 一旦回到单线程代码调用Rcpp::stop(thattext)

推荐阅读