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

时间:2012-03-24 15:52:55

标签: ruby thread-safety

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

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

2 个答案:

答案 0 :(得分:1)

这取决于实施。请注意,x ||= y会扩展为x || x = yx = y仅在x既不是false也不是nil时才会执行。

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

YARV使用本机线程来实现并发,以真正的并行方式运行。但是,为了保持向后兼容性,引入了global, interpreter-wide lock

但是,JRuby对您的代码没有内部锁定,所以必须在需要时手动同步您的电话。

有关详细信息,请参阅another answer I've given about the subject。另外,请阅读this excellent answer by Jörg W Mittag以深入了解各种Ruby实现的线程模型。

答案 1 :(得分:0)

Luca Guidi撰写的thread safety concepts in Ruby这篇精彩文章表明,||=不是线程安全的(至少在MRI中)。