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