Module Mutex_m
In: lib/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 lib/mutex_m.rb, line 42
42:   def Mutex_m.append_features(cl)
43:     super
44:     define_aliases(cl) unless cl.instance_of?(Module)
45:   end

[Source]

    # File lib/mutex_m.rb, line 32
32:   def Mutex_m.define_aliases(cl)
33:     cl.module_eval %q{
34:       alias locked? mu_locked?
35:       alias lock mu_lock
36:       alias unlock mu_unlock
37:       alias try_lock mu_try_lock
38:       alias synchronize mu_synchronize
39:     }
40:   end

[Source]

    # File lib/mutex_m.rb, line 47
47:   def Mutex_m.extend_object(obj)
48:     super
49:     obj.mu_extended
50:   end

[Source]

     # File lib/mutex_m.rb, line 118
118:   def initialize(*args)
119:     mu_initialize
120:     super
121:   end

Public Instance methods

[Source]

    # File lib/mutex_m.rb, line 52
52:   def mu_extended
53:     unless (defined? locked? and
54:             defined? lock and
55:             defined? unlock and
56:             defined? try_lock and
57:             defined? synchronize)
58:       Mutex_m.define_aliases(class<<self;self;end)
59:     end
60:     mu_initialize
61:   end

[Source]

    # File lib/mutex_m.rb, line 88
88:   def mu_lock
89:     while (Thread.critical = true; @mu_locked)
90:       @mu_waiting.push Thread.current
91:       Thread.stop
92:     end
93:     @mu_locked = true
94:     Thread.critical = false
95:     self
96:   end

[Source]

    # File lib/mutex_m.rb, line 73
73:   def mu_locked?
74:     @mu_locked
75:   end

locking

[Source]

    # File lib/mutex_m.rb, line 64
64:   def mu_synchronize
65:     begin
66:       mu_lock
67:       yield
68:     ensure
69:       mu_unlock
70:     end
71:   end

[Source]

    # File lib/mutex_m.rb, line 77
77:   def mu_try_lock
78:     result = false
79:     Thread.critical = true
80:     unless @mu_locked
81:       @mu_locked = true
82:       result = true
83:     end
84:     Thread.critical = false
85:     result
86:   end

[Source]

     # File lib/mutex_m.rb, line 98
 98:   def mu_unlock
 99:     return unless @mu_locked
100:     Thread.critical = true
101:     wait = @mu_waiting
102:     @mu_waiting = []
103:     @mu_locked = false
104:     Thread.critical = false
105:     for w in wait
106:       w.run
107:     end
108:     self
109:   end

Private Instance methods

[Source]

     # File lib/mutex_m.rb, line 113
113:   def mu_initialize
114:     @mu_waiting = []
115:     @mu_locked = false;
116:   end

[Validate]