mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/delegate.rb: catch up with class local variable (@_v) spec.
* lib/singleton.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11742 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
fdf4aa982f
commit
970df0d138
4 changed files with 29 additions and 23 deletions
|
@ -39,7 +39,7 @@
|
|||
# method body is a simple:
|
||||
#
|
||||
# def Klass.instance()
|
||||
# return @__instance__
|
||||
# return @singleton__instance__
|
||||
# end
|
||||
#
|
||||
# * Klass._load(str) - calling Klass.instance()
|
||||
|
@ -101,16 +101,16 @@ module Singleton
|
|||
class << Singleton
|
||||
def __init__(klass)
|
||||
klass.instance_eval {
|
||||
@__instance__ = nil
|
||||
@__mutex__ = Mutex.new
|
||||
@singleton__instance__ = nil
|
||||
@singleton__mutex__ = Mutex.new
|
||||
}
|
||||
def klass.instance
|
||||
return @__instance__ if @__instance__
|
||||
@__mutex__.synchronize {
|
||||
return @__instance__ if @__instance__
|
||||
@__instance__ = new()
|
||||
return @singleton__instance__ if @singleton__instance__
|
||||
@singleton__mutex__.synchronize {
|
||||
return @singleton__instance__ if @singleton__instance__
|
||||
@singleton__instance__ = new()
|
||||
}
|
||||
@__instance__
|
||||
@singleton__instance__
|
||||
end
|
||||
klass
|
||||
end
|
||||
|
@ -177,13 +177,13 @@ end
|
|||
class << Ups
|
||||
def _instantiate?
|
||||
@enter.push Thread.current[:i]
|
||||
while false.equal?(@__instance__)
|
||||
@__mutex__.unlock
|
||||
while false.equal?(@singleton__instance__)
|
||||
@singleton__mutex__.unlock
|
||||
sleep 0.08
|
||||
@__mutex__.lock
|
||||
@singleton__mutex__.lock
|
||||
end
|
||||
@leave.push Thread.current[:i]
|
||||
@__instance__
|
||||
@singleton__instance__
|
||||
end
|
||||
|
||||
def __sleep
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue