123456789_123456789_123456789_123456789_123456789_

Module: RactorLocalSingleton::RactorLocalSingletonClassMethods

Do not use. This module is for internal use only.
Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
Defined in: lib/singleton.rb

Instance Method Summary

Instance Method Details

#instance

[ GitHub ]

  
# File 'lib/singleton.rb', line 205

def instance
  set_mutex(Thread::Mutex.new) if Ractor.current[mutex_key].nil?
  return Ractor.current[instance_key] if Ractor.current[instance_key]
  Ractor.current[mutex_key].synchronize {
    return Ractor.current[instance_key] if Ractor.current[instance_key]
    set_instance(new())
  }
  Ractor.current[instance_key]
end

#instance_key (private)

[ GitHub ]

  
# File 'lib/singleton.rb', line 217

def instance_key
  :"__RactorLocalSingleton_instance_with_class_id_#{object_id}__"
end

#mutex_key (private)

[ GitHub ]

  
# File 'lib/singleton.rb', line 221

def mutex_key
  :"__RactorLocalSingleton_mutex_with_class_id_#{object_id}__"
end

#set_instance(val) (private)

[ GitHub ]

  
# File 'lib/singleton.rb', line 225

def set_instance(val)
  Ractor.current[instance_key] = val
end

#set_mutex(val) (private)

[ GitHub ]

  
# File 'lib/singleton.rb', line 229

def set_mutex(val)
  Ractor.current[mutex_key] = val
end