Seguridad de subprocesos: Variables de clase en Ruby
Realizar escrituras / lecturas en variables de clase en Ruby no es seguro para subprocesos. Realizar escrituras / lecturas en variables de instancia parece ser seguro para subprocesos. Dicho esto, ¿es seguro para subprocesos realizar escritura / lectura en variables de instancia de una clase u objeto de metaclase?
¿Cuáles son las diferencias entre estos tres ejemplos (artificiales) en términos de seguridad de subprocesos?
EJEMPLO 1 EXCLUSIÓN MUTU
class BestUser # (singleton class)
@@instance_lock = Mutex.new
# Memoize instance
def self.instance
@@instance_lock.synchronize do
@@instance ||= best
end
end
end
EJEMPLO 2: INSTANCE ALMACENAMIENTO VARIABLE
class BestUser # (singleton class)
# Memoize instance
def self.instance
@instance ||= best
end
end
EJEMPLO 3: INSTANCE ALMACENAMIENTO VARIABLE EN METACLASS
class BestUser # (singleton class)
# Memoize instance
class << self
def instance
@instance ||= best
end
end
end