Realizar escrituras/lecturas en variables de clase en Ruby no es seguro para subprocesos. La realización de escrituras/lecturas en variables de instancia parece ser segura para subprocesos. Dicho esto, ¿es seguro realizar lecturas/lecturas en variables de instancia de una clase o un objeto de metaclase?Seguridad de subprocesos: Variables de clase en Ruby
¿Cuáles son las diferencias entre estos tres ejemplos (artificiales) en términos de seguridad de subprocesos?
Ejemplo 1:exclusión mutua
class BestUser # (singleton class)
@@instance_lock = Mutex.new
# Memoize instance
def self.instance
@@instance_lock.synchronize do
@@instance ||= best
end
end
end
Ejemplo 2:almacenamiento de instancia VARIABLE
class BestUser # (singleton class)
# Memoize instance
def self.instance
@instance ||= best
end
end
Ejemplo 3:almacenamiento de instancia VARIABLE EN MetaClass
class BestUser # (singleton class)
# Memoize instance
class << self
def instance
@instance ||= best
end
end
end
¿Sabes si el acceso a las variables de instancia es realmente seguro o es simplemente basado en mi suposición de que * parece * ser? –
@AnomalousThought; consulte la respuesta actualizada para obtener información acerca de la seguridad de las secuencias. –
@MatheusMoreira ¿Te importaría echarle un vistazo a http://stackoverflow.com/questions/21735401/using-class-instance-variable-for-mutex-in-ruby cuando tienes la oportunidad? Gracias. –