module Ractor::LocalVariable::Implementation

Constants

MUTEX

Public Class Methods

new(&block) click to toggle source
# File lib/ractor/local_variable.rb, line 25
def initialize(&block)
  raise ArgumentError, 'No block given' unless block

  @initializer = Ractor.make_shareable(block)
  @hold_me = Object.new.freeze
  @unique_id = :"Ractor::LocalVariable<#{@hold_me.object_id}>"
  freeze
end

Public Instance Methods

ractor_local_value() click to toggle source
# File lib/ractor/local_variable.rb, line 34
def ractor_local_value
  t = Thread.main
  t.thread_variable_get(@unique_id) ||
    MUTEX.synchronize do
      t.thread_variable_get(@unique_id) ||
        t.thread_variable_set(@unique_id, @initializer.call ||
          raise(NotImplementedError,
                'Initializer blocks returning `nil` of `false` not supported'))
    end
end