Module
Class Methods
ext/monitor/lib/monitor.rb
View on GitHub
# File tmp/rubies/ruby-3.0.5/ext/monitor/lib/monitor.rb, line 153
def self.extend_object(obj)
super(obj)
obj.__send__(:mon_initialize)
end
No documentation available
::
ext/monitor/lib/monitor.rb
View on GitHub
# File tmp/rubies/ruby-3.0.5/ext/monitor/lib/monitor.rb, line 223
def initialize(...)
super
mon_initialize
end
Use extend MonitorMixin
or include MonitorMixin
instead of this constructor. Have look at the examples above to understand how to use this module.
Instance Methods
ext/monitor/lib/monitor.rb
View on GitHub
# File tmp/rubies/ruby-3.0.5/ext/monitor/lib/monitor.rb, line 242
def mon_check_owner
@mon_data.mon_check_owner
end
No documentation available
ext/monitor/lib/monitor.rb
View on GitHub
# File tmp/rubies/ruby-3.0.5/ext/monitor/lib/monitor.rb, line 170
def mon_enter
@mon_data.enter
end
Enters exclusive section.
#
ext/monitor/lib/monitor.rb
View on GitHub
# File tmp/rubies/ruby-3.0.5/ext/monitor/lib/monitor.rb, line 177
def mon_exit
mon_check_owner
@mon_data.exit
end
Leaves exclusive section.
ext/monitor/lib/monitor.rb
View on GitHub
# File tmp/rubies/ruby-3.0.5/ext/monitor/lib/monitor.rb, line 230
def mon_initialize
if defined?(@mon_data)
if defined?(@mon_initialized_by_new_cond)
return # already initialized.
elsif @mon_data_owner_object_id == self.object_id
raise ThreadError, "already initialized"
end
end
@mon_data = ::Monitor.new
@mon_data_owner_object_id = self.object_id
end
Initializes the MonitorMixin
after being included in a class or when an object has been extended with the MonitorMixin
ext/monitor/lib/monitor.rb
View on GitHub
# File tmp/rubies/ruby-3.0.5/ext/monitor/lib/monitor.rb, line 185
def mon_locked?
@mon_data.mon_locked?
end
Returns true if this monitor is locked by any thread
ext/monitor/lib/monitor.rb
View on GitHub
# File tmp/rubies/ruby-3.0.5/ext/monitor/lib/monitor.rb, line 192
def mon_owned?
@mon_data.mon_owned?
end
Returns true if this monitor is locked by current thread.
ext/monitor/lib/monitor.rb
View on GitHub
# File tmp/rubies/ruby-3.0.5/ext/monitor/lib/monitor.rb, line 201
def mon_synchronize(&b)
@mon_data.synchronize(&b)
end
Enters exclusive section and executes the block. Leaves the exclusive section automatically when the block exits. See example under MonitorMixin
.
ext/monitor/lib/monitor.rb
View on GitHub
# File tmp/rubies/ruby-3.0.5/ext/monitor/lib/monitor.rb, line 161
def mon_try_enter
@mon_data.try_enter
end
Attempts to enter exclusive section. Returns false
if lock fails.
#
ext/monitor/lib/monitor.rb
View on GitHub
# File tmp/rubies/ruby-3.0.5/ext/monitor/lib/monitor.rb, line 210
def new_cond
unless defined?(@mon_data)
mon_initialize
@mon_initialized_by_new_cond = true
end
return ConditionVariable.new(@mon_data)
end
Creates a new MonitorMixin::ConditionVariable
associated with the Monitor
object.