module MonitorMixin

Public Class Methods

extend_object(obj) click to toggle source
Calls superclass method
# File ext/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 ext/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 ext/monitor/lib/monitor.rb, line 170
def mon_enter
  @mon_data.enter
end
mon_exit() click to toggle source

Leaves exclusive section.

# File ext/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 ext/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 ext/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 ext/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 ext/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 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
synchronize(&b)
Alias for: mon_synchronize
try_mon_enter()

For backward compatibility

Alias for: mon_try_enter

Private Instance Methods

mon_check_owner() click to toggle source
# File ext/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 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