# 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