multithreading - 使用 Rcpp 时抛出错误的线程安全方法是什么
问题描述
我RcppThread
在函数中使用并行Rcpp
性。在并行循环中间抛出错误的首选方法是什么?R 的 API 是单线程的,所以我认为Rcpp::stop()
它不是线程安全的。RcppThread
提供线程安全的方法cout
,CheckUserInterrupt
但据我所知,不是线程安全的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?");
});
}
解决方案
可能不会——例如在 RcppParallel 文档中陈述的简单且经常重复的规则是,不应从多线程代码返回到 R 或与 R 创建/拥有的内存进行任何联系。
从头顶上,我只想
- 从并行循环中中断
- 将错误条件或文本分配给字符串
- 一旦回到单线程代码调用
Rcpp::stop(thattext)
推荐阅读
- javascript - JavaScript,解构与赋值
- php - 当我向服务器发出快速 ajax 请求时,Laravel 会更改我的 CSRF 令牌
- html - 为什么我的 div 元素没有按预期响应?
- json - 从 json 中选择键值对作为 Snowflake 中的行
- aem - 如何为包安装添加示例运行模式
- svg - 将SVG转换为PNG并下载,vue 2
- azure-blob-storage - 也可以通过 Azure 公共 IP 访问 Azure Blob 文件
- sql - Snowflake SQL 编译错误:已声明查看定义但已生成查看查询
- arrays - 列表到数组而不使用 OCaml 中的数组模块
- python - Webscraping - 试图提取一些数据,但陷入了最后的障碍