Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more

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
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus