Wykonywanie zapisów/odczytów zmiennych klas w Ruby nie jest bezpieczne dla wątków. Wykonywanie zapisów/odczytów zmiennych instancji wydaje się być bezpieczne dla wątków. Powiedział, że jest wątek bezpieczny do wykonywania zapisu/odczytu na zmiennych instancji obiektu klasy lub metaclass?Bezpieczeństwo wątków: zmienne klas w języku Ruby
Jakie są różnice między tymi trzema (wymyślonymi) przykładami pod względem bezpieczeństwa gwintów?
Przykład 1:wzajemnego wykluczania
class BestUser # (singleton class)
@@instance_lock = Mutex.new
# Memoize instance
def self.instance
@@instance_lock.synchronize do
@@instance ||= best
end
end
end
Przykład 2:zmiennej instancji magazynowanie
class BestUser # (singleton class)
# Memoize instance
def self.instance
@instance ||= best
end
end
Przykład 3:zmiennej instancji Składowanie na metaklasą
class BestUser # (singleton class)
# Memoize instance
class << self
def instance
@instance ||= best
end
end
end
Czy znasz się na sobie, jeśli dostęp do zmiennych instancji jest w rzeczywistości bezpieczny dla wątków, czy jest to oparte na moim założeniu, że * wydaje się być? –
@AnomalousThought, zobacz zaktualizowaną odpowiedź, aby uzyskać informacje na temat bezpieczeństwa wątków. –
@MatheusMoreira Czy mógłbyś rzucić okiem na http://stackoverflow.com/questions/21735401/using-class-instance-variable-for-mutex-in-ruby, gdy masz szansę? Dzięki. –