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

sen*_*hil 7 ruby thread-safety

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

最初阅读有关ActiveSupport :: Memoizable的内容并且想知道那里的线程安全性.

Mat*_*ira 3

这取决于实施。请注意,它x ||= y会扩展为x || x = y,并且仅当是或 时x = y才会执行。xfalsenil

\n\n

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

\n\n

YARV 使用本机线程来实现并发,它确实以真正的并行方式运行。然而,为了保持向后兼容性,引入了全局的、解释器范围的锁。

\n\n

然而,JRuby 不会对代码施加内部锁定,因此您必须在需要时手动同步调用。

\n\n

有关更多详细信息,请参阅我就该主题给出的另一个答案。另外,请阅读J\xc3\xb6rg W Mittag 的精彩回答,更深入地了解各种 Ruby 实现的线程模型。

\n