如何避免Ruby扩展中的跨线程违规?
发布时间:2020-12-17 03:26:34 所属栏目:百科 来源:网络整理
导读:我正在编写一个C扩展,提供 Ruby和异步I / O库之间的接口.在我的代码上运行测试时,我经常会遇到错误,包括(但不限于): [BUG] cross-thread violation in rb_thread_schedule() 异步IO意味着我的C扩展需要从多个线程(而不是主解释器线程)向ruby传递消息.在此过
我正在编写一个C扩展,提供
Ruby和异步I / O库之间的接口.在我的代码上运行测试时,我经常会遇到错误,包括(但不限于):
[BUG] cross-thread violation in rb_thread_schedule() 异步IO意味着我的C扩展需要从多个线程(而不是主解释器线程)向ruby传递消息.在此过程中如何避免这些线程安全违规? 解决方法
对于ruby 1.8.x,避免错误的唯一方法是显而易见的 – 只从主解释器线程调用Ruby / C API.我相信这也适用于ruby 1.9.x,但我还没有使用它,也不知道它的原生线程支持如何改变它.您需要使用生产者/消费者模式将辅助本机线程的请求传递到主解释器线程中的代码,而不是让多个本机线程直接调用API.理想情况下,这样做不会不必要地阻止其他Ruby绿色线程.如果你看一下ruby实现,ruby green thread调度程序必然是一个select()循环.这表明以下整体结构:
>创建一个管道或其他IPC机制,提供真正的select() – 文件描述符. 请参阅rb_io_sysread()(IO#sysread的实现),这可能是ruby代码库中最简单的干净IO使用函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – 具有嵌套属性的Best_In_Place内联编辑
- 如何从postgresql打印表结构?
- 使用Xcode 5.0和Rcpp(安装了命令行工具ARE)时出错
- ruby-on-rails – Rails – 给定一个文本块,自动链接链接
- c# – 符合这些要求的最佳ORM是什么
- 严重: Caught exception while loading file com/bh/action
- c# – 同步调用BackgroundWorker
- Cocos2dx 报错:Error: Program "make" is not fou
- disconf-基于xml分布式配置管理mongo
- Cocos2d-x安装的应用程序无法在android上启动