ruby - 自动加载在 Ruby 1.9 中是线程安全的吗?

标签 ruby multithreading autoload ruby-1.9

在我看来,自从 this famous thread 以来,Ruby 社区一直对自动加载感到恐惧。 ,出于线程安全原因,不鼓励使用它。

有谁知道这在 Ruby 1.9.1 或 1.9.2 中是否不再是一个问题?我已经看到一些关于在互斥体中包装要求等的讨论,但是 1.9 变更日志(或者至少是我能够找到的那么多)似乎没有解决这个特定问题。我想知道我是否可以合理地开始在 1.9-only 库中自动加载而不会有任何合理的悲伤。

提前感谢您的任何见解。

最佳答案

因为我也对此感到好奇,所以在 2011 年对此进行了更新。

目前打开了两张工单:

核心开发者建议在 CRuby/JRuby 1.9 中 require 和 autoload 以相同的方式工作并且是线程安全的。从某种意义上说,ruby 在文件完全加载之前保持锁定。

然而,这会带来带来潜在死锁的不便副作用。具体来说:

  1. Th1加载A并锁定
  2. Th2加载B并锁定
  3. Th1 尝试加载 B 作为加载 A 的一部分,开始等待 Th2
  4. Th2 尝试加载 A 作为加载 B 的一部分,开始等待 Th1
  5. 死锁...

结论可能是:如果您的应用程序中存在死锁的可能性,则在启动线程之前需要您需要的一切。

关于ruby - 自动加载在 Ruby 1.9 中是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2837912/

相关文章:

PHP Composer 找不到自动加载的文件

php - 在 PHP 中自动加载静态实例化的类

php - 在什么情况下,如果我们将排序后的数字作为键添加到哈希表中,我们可以期望哈希是有序的?

ruby - 如何从 gem 内部引用文件

java - 如何从线程组中删除线程

c# - 多线程设计模式

ruby - 在 ruby​​ 中通过 ioctl 获取 essid

ruby-on-rails - Rails 从表单更新 ActiveRecord

c - windows vista 的 slim reader writer locks 有跨平台版本吗?

PHP - 命名空间和自动加载问题