Module Mutex_m
In: mutex_m.rb

Usage

Extend an object and use it like a Mutex object:

  require "mutex_m.rb"
  obj = Object.new
  obj.extend Mutex_m
  # ...

Or, include Mutex_m in a class to have its instances behave like a Mutex object:

  class Foo
    include Mutex_m
    # ...
  end

  obj = Foo.new

Methods

Public Class methods

[Source]

# File mutex_m.rb, line 42
  def Mutex_m.append_features(cl)
    super
    define_aliases(cl) unless cl.instance_of?(Module)
  end

[Source]

# File mutex_m.rb, line 32
  def Mutex_m.define_aliases(cl)
    cl.module_eval %q{
      alias locked? mu_locked?
      alias lock mu_lock
      alias unlock mu_unlock
      alias try_lock mu_try_lock
      alias synchronize mu_synchronize
    }
  end

[Source]

# File mutex_m.rb, line 47
  def Mutex_m.extend_object(obj)
    super
    obj.mu_extended
  end

[Source]

# File mutex_m.rb, line 118
  def initialize(*args)
    mu_initialize
    super
  end

Public Instance methods

[Source]

# File mutex_m.rb, line 52
  def mu_extended
    unless (defined? locked? and
            defined? lock and
            defined? unlock and
            defined? try_lock and
            defined? synchronize)
      Mutex_m.define_aliases(class<<self;self;end)
    end
    mu_initialize
  end

[Source]

# File mutex_m.rb, line 88
  def mu_lock
    while (Thread.critical = true; @mu_locked)
      @mu_waiting.push Thread.current
      Thread.stop
    end
    @mu_locked = true
    Thread.critical = false
    self
  end

[Source]

# File mutex_m.rb, line 73
  def mu_locked?
    @mu_locked
  end

locking

[Source]

# File mutex_m.rb, line 64
  def mu_synchronize
    begin
      mu_lock
      yield
    ensure
      mu_unlock
    end
  end

[Source]

# File mutex_m.rb, line 77
  def mu_try_lock
    result = false
    Thread.critical = true
    unless @mu_locked
      @mu_locked = true
      result = true
    end
    Thread.critical = false
    result
  end

[Source]

# File mutex_m.rb, line 98
  def mu_unlock
    return unless @mu_locked
    Thread.critical = true
    wait = @mu_waiting
    @mu_waiting = []
    @mu_locked = false
    Thread.critical = false
    for w in wait
      w.run
    end
    self
  end

[Validate]

ruby-doc.org is hosted and maintained by James Britt and Happy Camper Studios, a Ruby application development company in Phoenix, Arizona. The site was created in 2002 as part of the Ruby Documentation Project to promote the Ruby language and to help other Ruby hackers.

Documentation content on ruby-doc.org is provided by remarkable members of the Ruby community.

For more information on the Ruby programming language, visit ruby-lang.org.

Want to help improve Ruby's API docs? See Ruby Documentation Guidelines.