In Files

  • mutex_m.rb

Class/Module Index [+]

Quicksearch

Mutex_m

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

Public Class Methods

append_features(cl) click to toggle source
 
               # File mutex_m.rb, line 42
def Mutex_m.append_features(cl)
  super
  define_aliases(cl) unless cl.instance_of?(Module)
end
            
define_aliases(cl) click to toggle 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
            
extend_object(obj) click to toggle source
 
               # File mutex_m.rb, line 47
def Mutex_m.extend_object(obj)
  super
  obj.mu_extended
end
            
new(*args) click to toggle source
 
               # File mutex_m.rb, line 118
def initialize(*args)
  mu_initialize
  super
end
            

Public Instance Methods

mu_extended() click to toggle 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
            
mu_lock() click to toggle 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
            
mu_locked?() click to toggle source
 
               # File mutex_m.rb, line 73
def mu_locked?
  @mu_locked
end
            
mu_synchronize() click to toggle source

locking

 
               # File mutex_m.rb, line 64
def mu_synchronize
  begin
    mu_lock
    yield
  ensure
    mu_unlock
  end
end
            
mu_try_lock() click to toggle 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
            
mu_unlock() click to toggle 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