--Multipart_Wed_Nov_24_03:45:40_1999-1
Content-Type: text/plain; charset=ISO-2022-JP

¤´¤È¤±¤ó¤Ç¤¹

In message "[ruby-list:18868] Singleton ¤Î instance ¤¬Ê£¿ô¤Ë¤Ê¤ë¤³¤È¤¬¤¢¤ë"
    on 99/11/24, Kazuhiro Nishiyama <nishiyama / mx1.tiki.ne.jp> writes:

>require 'singleton'
>
>class C
>  include Singleton
>  def initialize
>    Thread.pass # ¼ÂºÝ¤Ë¤ÏÉáÄ̤Îý¤ò¤·¤Æ¤¤¤ë¤À¤±¡¨Â
 åî¾åîä
¾Ôèòåáä®îåäï
 îéîóôáîãå®é¾åîä
¾ð îéîóôáîãå®é¾£ ¤Â¤Ä¤Îinstance¤Îid¤¬°ã¤¦¡£

singleton.rb ¤Ë°Ê²¼¤Î¥Ñ¥Ã¥Á¤òÅö¤Æ¤ë¤È¤¤¤¦¤Î¤Ï¤É¤¦¤Ç¤·¤ç¤¦¡£


--Multipart_Wed_Nov_24_03:45:40_1999-1
Content-Type: application/octet-stream; type=patch
Content-Disposition: attachment; filename="singleton.rb.patch"
Content-Transfer-Encoding: 7bit

--- singleton.rb-orig	Fri Aug 13 23:28:39 1999
+++ singleton.rb	Wed Nov 24 03:42:52 1999
@@ -11,13 +11,17 @@
 #   a  omeSingletonClass.new		# error (`new' is private)
 
 module Singleton
+  require "thread"
   def Singleton.append_features(klass)
     klass.private_class_method(:new)
+    klass.const_set("MUTEX", Mutex.new)
     klass.instance_eval %{
       def instance
-	unless @__instance__
-	  @__instance__  ew
-	end
+	self::MUTEX.synchronize{
+	  unless @__instance__
+	    @__instance__  ew
+	  end
+	}
 	return @__instance__
       end
     }

--Multipart_Wed_Nov_24_03:45:40_1999-1--