Thread Safety: Variáveis de classe em Ruby
Executar gravações / leituras em variáveis de classe em Ruby não é seguro para threads. Executar gravações / leituras em variáveis de instância parece ser seguro para threads. Dito isto, é seguro para threads executar gravações / leituras em variáveis de instância de um objeto de classe ou metaclasse?
Quais são as diferenças entre esses três exemplos (inventados) em termos de segurança de thread
EXEMPLO 1 EXCLUSÃO MÚTU
class BestUser # (singleton class)
@@instance_lock = Mutex.new
# Memoize instance
def self.instance
@@instance_lock.synchronize do
@@instance ||= best
end
end
end
EXEMPLO 2: INSTANCE ARMAZENAMENTO VARIÁVEL
class BestUser # (singleton class)
# Memoize instance
def self.instance
@instance ||= best
end
end
EXEMPLO 3: RTIGOS VARIÁVEIS EM METACLASS
class BestUser # (singleton class)
# Memoize instance
class << self
def instance
@instance ||= best
end
end
end