module Concurrent::Synchronization::SafeInitialization
@!visibility private @!macro internal_implementation_note
By extending this module, a class and all its children are marked to be constructed safely. Meaning that all writes (ivar initializations) are made visible to all readers of newly constructed object. It ensures same behaviour as Java’s final fields.
Due to using Kernel#extend, the module is not included again if already present in the ancestors, which avoids extra overhead.
@example
class AClass < Concurrent::Synchronization::Object extend Concurrent::Synchronization::SafeInitialization def initialize @AFinalValue = 'value' # published safely, #foo will never return nil end def foo @AFinalValue end end
Public Instance Methods
new(*args, &block)
click to toggle source
Calls superclass method
# File lib/concurrent-ruby/concurrent/synchronization/safe_initialization.rb, line 29 def new(*args, &block) super(*args, &block) ensure Concurrent::Synchronization.full_memory_barrier end