module MonitorMixin
Public Class Methods
extend_object(obj)
click to toggle source
Calls superclass method
# File monitor/lib/monitor.rb, line 153 def self.extend_object(obj) super(obj) obj.__send__(:mon_initialize) end
new(...)
click to toggle source
Use extend MonitorMixin
or include MonitorMixin
instead of this constructor. Have look at the examples above to understand how to use this module.
Calls superclass method
# File monitor/lib/monitor.rb, line 223 def initialize(...) super mon_initialize end
Public Instance Methods
mon_enter()
click to toggle source
Enters exclusive section.
# File monitor/lib/monitor.rb, line 170 def mon_enter @mon_data.enter end
mon_exit()
click to toggle source
Leaves exclusive section.
# File monitor/lib/monitor.rb, line 177 def mon_exit mon_check_owner @mon_data.exit end
mon_locked?()
click to toggle source
Returns true if this monitor is locked by any thread
# File monitor/lib/monitor.rb, line 185 def mon_locked? @mon_data.mon_locked? end
mon_owned?()
click to toggle source
Returns true if this monitor is locked by current thread.
# File monitor/lib/monitor.rb, line 192 def mon_owned? @mon_data.mon_owned? end
mon_synchronize(&b)
click to toggle source
Enters exclusive section and executes the block. Leaves the exclusive section automatically when the block exits. See example under MonitorMixin
.
# File monitor/lib/monitor.rb, line 201 def mon_synchronize(&b) @mon_data.synchronize(&b) end
Also aliased as: synchronize
mon_try_enter()
click to toggle source
Attempts to enter exclusive section. Returns false
if lock fails.
# File monitor/lib/monitor.rb, line 161 def mon_try_enter @mon_data.try_enter end
Also aliased as: try_mon_enter
new_cond()
click to toggle source
Creates a new MonitorMixin::ConditionVariable
associated with the Monitor
object.
# File 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
Private Instance Methods
mon_check_owner()
click to toggle source
# File monitor/lib/monitor.rb, line 242 def mon_check_owner @mon_data.mon_check_owner end
mon_initialize()
click to toggle source
Initializes the MonitorMixin
after being included in a class or when an object has been extended with the MonitorMixin
# File 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