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
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 see Improve the docs, or visit Documenting-ruby.org.