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
# File mutex_m.rb, line 42 def Mutex_m.append_features(cl) super define_aliases(cl) unless cl.instance_of?(Module) end
# 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
# 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
# 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
locking
# File mutex_m.rb, line 64 def mu_synchronize begin mu_lock yield ensure mu_unlock end end