module Concurrent::ThreadSafe::Util
@!visibility private
@!visibility private
@!visibility private
@!visibility private
@!visibility private
@!visibility private
@!visibility private
Constants
- CPU_COUNT
TODO (pitr-ch 15-Oct-2016): migrate to
Utility::ProcessorCounter
- FIXNUM_BIT_SIZE
TODO (pitr-ch 15-Oct-2016): migrate to
Utility::NativeInteger
- MAX_INT
Public Class Methods
make_synchronized_on_cruby(klass)
click to toggle source
# File lib/concurrent-ruby/concurrent/thread_safe/util/data_structures.rb, line 15 def self.make_synchronized_on_cruby(klass) klass.class_eval do def initialize(*args, &block) @_monitor = Monitor.new super end def initialize_copy(other) # make sure a copy is not sharing a monitor with the original object! @_monitor = Monitor.new super end end klass.superclass.instance_methods(false).each do |method| klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{method}(*args) monitor = @_monitor monitor or raise("BUG: Internal monitor was not properly initialized. Please report this to the concurrent-ruby developers.") monitor.synchronize { super } end RUBY end end
make_synchronized_on_rbx(klass)
click to toggle source
# File lib/concurrent-ruby/concurrent/thread_safe/util/data_structures.rb, line 40 def self.make_synchronized_on_rbx(klass) klass.class_eval do private def _mon_initialize @_monitor ||= Monitor.new # avoid double initialisation end def self.new(*args) obj = super(*args) obj.send(:_mon_initialize) obj end end klass.superclass.instance_methods(false).each do |method| case method when :new_range, :new_reserved klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{method}(*args) obj = super obj.send(:_mon_initialize) obj end RUBY else klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{method}(*args) monitor = @_monitor monitor or raise("BUG: Internal monitor was not properly initialized. Please report this to the concurrent-ruby developers.") monitor.synchronize { super } end RUBY end end end
make_synchronized_on_truffleruby(klass)
click to toggle source
# File lib/concurrent-ruby/concurrent/thread_safe/util/data_structures.rb, line 77 def self.make_synchronized_on_truffleruby(klass) klass.superclass.instance_methods(false).each do |method| klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{method}(*args, &block) TruffleRuby.synchronized(self) { super(*args, &block) } end RUBY end end
new(*args, &block)
click to toggle source
Calls superclass method
# File lib/concurrent-ruby/concurrent/thread_safe/util/data_structures.rb, line 17 def initialize(*args, &block) @_monitor = Monitor.new super end
new(*args)
click to toggle source
Calls superclass method
# File lib/concurrent-ruby/concurrent/thread_safe/util/data_structures.rb, line 48 def self.new(*args) obj = super(*args) obj.send(:_mon_initialize) obj end
Public Instance Methods
_mon_initialize()
click to toggle source
# File lib/concurrent-ruby/concurrent/thread_safe/util/data_structures.rb, line 44 def _mon_initialize @_monitor ||= Monitor.new # avoid double initialisation end
initialize_copy(other)
click to toggle source
Calls superclass method
# File lib/concurrent-ruby/concurrent/thread_safe/util/data_structures.rb, line 22 def initialize_copy(other) # make sure a copy is not sharing a monitor with the original object! @_monitor = Monitor.new super end