在我看来,自从 this famous thread 以来,Ruby 社区一直对自动加载感到恐惧。 ,出于线程安全原因,不鼓励使用它。
有谁知道这在 Ruby 1.9.1 或 1.9.2 中是否不再是一个问题?我已经看到一些关于在互斥体中包装要求等的讨论,但是 1.9 变更日志(或者至少是我能够找到的那么多)似乎没有解决这个特定问题。我想知道我是否可以合理地开始在 1.9-only 库中自动加载而不会有任何合理的悲伤。
提前感谢您的任何见解。
最佳答案
因为我也对此感到好奇,所以在 2011 年对此进行了更新。
目前打开了两张工单:
核心开发者建议在 CRuby/JRuby 1.9 中 require 和 autoload 以相同的方式工作并且是线程安全的。从某种意义上说,ruby 在文件完全加载之前保持锁定。
然而,这会带来带来潜在死锁的不便副作用。具体来说:
- Th1加载A并锁定
- Th2加载B并锁定
- Th1 尝试加载 B 作为加载 A 的一部分,开始等待 Th2
- Th2 尝试加载 A 作为加载 B 的一部分,开始等待 Th1
- 死锁...
结论可能是:如果您的应用程序中存在死锁的可能性,则在启动线程之前需要您需要的一切。
关于ruby - 自动加载在 Ruby 1.9 中是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2837912/