繁体   English   中英

是|| =在Ruby线程安全吗?

[英]Is ||= in Ruby thread safe?

不确定线程​​安全是否适用于||=

最初阅读有关ActiveSupport :: Memoizable的内容, 并对那里的线程安全感到疑惑。

这取决于实施。 请注意, x ||= y会扩展为x || x = y x || x = y ,只有当xfalsenil时才执行x = y

话虽如此,Ruby语言的C实现应该是完全线程安全的。

YARV使用本地线程,以实现并发性,从而真正的并行运行。 但是,为了保持向后兼容性,引入了全局解释器范围的锁

但是,JRuby对代码没有内部锁定,因此您必须在需要时手动同步调用。

有关详细信息,请参阅我给出的有关该主题的另一个答案 另外,请阅读JörgWMittag的这个优秀答案,以便更深入地了解各种Ruby实现的线程模型。

Luca Guidi 在Ruby中关于线程安全概念的这篇文章表明||=不是线程安全的(至少在MRI中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM