From: Kfir Lavi Date: 2009-05-10T02:20:04+09:00 Subject: Wait until a Singleton instantiated? Hi, I have singleton class I want to observe with another class. The problem is that the singleton class will create the instance of the class that wants to observe it. Here is an example: require 'singleton' require 'observer' class A include Singleton include Observable def initialize B.new sleep 10 end end class B def initialize # register for A updates A.instance.add_observer(self) # will fail, because it waits for A end end A.instance You need to stop the program with Control-C and you get: ^C/usr/lib/ruby/1.8/singleton.rb:149:in `sleep': Interrupt from /usr/lib/ruby/1.8/singleton.rb:149:in `_instantiate?' from /usr/lib/ruby/1.8/singleton.rb:105:in `instance' from c.rb:21:in `initialize' from c.rb:10:in `new' from c.rb:10:in `initialize' from /usr/lib/ruby/1.8/singleton.rb:94:in `new' from /usr/lib/ruby/1.8/singleton.rb:94:in `instance' from c.rb:25 Command terminated The problem is that A didn't finish initializing, and B in order to add_observer waits for A to finish initialize. So both A and B sleeping waiting for each other. I thought to solve it by creating a thread that will wait for A to finish initialize. Something like this: Thread.new(self) do |me| while A.instance.not_initialize? do sleep 2 end A.instance.add_observer(self) end But how do I monitor if A finished initialize? Also, is there a better way of doing this? Idiom? Thanks, Kfir