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(*args)
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(*args) 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 initalized. 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