在Ruby中执行对类变量的写入/读取操作不是线程安全的。对实例变量执行写入/读取似乎是线程安全的。也就是说,对类或元类对象的实例变量执行写/读操作是否线程安全?线程安全:Ruby中的类变量
在线程安全方面,这三个(人为的)例子之间有什么区别?
实施例1:互斥
class BestUser # (singleton class)
@@instance_lock = Mutex.new
# Memoize instance
def self.instance
@@instance_lock.synchronize do
@@instance ||= best
end
end
end
实施例2:INSTANCE变量存储
class BestUser # (singleton class)
# Memoize instance
def self.instance
@instance ||= best
end
end
实施例3:INSTANCE变量存储ON元类
class BestUser # (singleton class)
# Memoize instance
class << self
def instance
@instance ||= best
end
end
end
如果访问实例变量实际上是线程安全的,或者仅仅基于我认为它*看起来是*的假设,您知道副手吗? – 2012-03-05 14:27:28
@AnomalousThought,查看有关线程安全性的一些信息的更新答案。 – 2012-03-05 17:24:07
@MatheusMoreira当你有机会时,你介意看看http://stackoverflow.com/questions/21735401/using-class-instance-variable-for-mutex-in-ruby吗?谢谢。 – 2014-02-12 20:49:37