Потокобезопасность: переменные класса в 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: ПЕРЕМЕННОЕ ХРАНЕНИЕ

class BestUser # (singleton class)
  # Memoize instance
  def self.instance
    @instance ||= best
  end
end

ПРИМЕР 3: ПЕРЕМЕННОЕ ХРАНЕНИЕ НА МЕТАКЛАСЕ

class BestUser # (singleton class)
  # Memoize instance
  class << self
    def instance
      @instance ||= best
    end
  end
end

Ответы на вопрос(3)

Ваш ответ на вопрос