From: shugo@... (Shugo Maeda) Date: 1998-02-27T23:23:44+09:00 Subject: [ruby-list:6829] monitor.rb --Multipart_Fri_Feb_27_23:21:10_1998-1 Content-Type: text/plain; charset=ISO-2022-JP 前田です。 Mutex/ConditionVariableを修正してmonitor.rbを書いてみました。 MonitorというクラスとMonitorMixinというモジュールが入っています。 MonitorはMutexとだいたい同じです。 foo = Foo.new mon = Monitor.new cond = mon.new_cond thread1: mon.synchronize { ... cond.wait_until { foo.done? } ... } thread2: mon.synchronize { foo.do_something cond.signal } これをMonitorMixinを使って書くとこうなります。 foo = Foo.new foo.extend(MonitorMixin) cond = foo.new_cond thread1: foo.synchronize { ... cond.wait_until { foo.done? } ... } thread2: foo.synchronize { foo.do_something cond.signal } includeする場合はinitializeをオーバーライドする時に必ずsuperを 呼ぶようにしてください。 # Queueで試したときにこれを忘れていてハマってしまいました。 組み込みクラスを継承したクラスの場合はnewをオーバーライドして mon_initializeを呼ぶ必要があります。 -- 前田 修吾 --Multipart_Fri_Feb_27_23:21:10_1998-1 Content-Type: application/octet-stream; type=gzip Content-Disposition: attachment; filename="monitor.rb.gz" Content-Transfer-Encoding: base64 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 eyHQq7rS+WcFGc+/9es9ZCEZAAA= --Multipart_Fri_Feb_27_23:21:10_1998-1 Content-Type: application/octet-stream; type=gzip Content-Disposition: attachment; filename="queue.rb.gz" Content-Transfer-Encoding: base64 H4sICMnH9jQAA3F1ZXVlLnJiAKVTy07DMBA8N1+xKpcWUMUZNaUXjj0guCFUuckmMbh26of6 QPw7G7tN45KeiKLI8c7Ozq7HN7Bx6HCiV0miceO4RhiuleRW6WGSZIIZAy8NJAGgl8tMuBxh ESALvuMyRHIsKMotZ4IfGjSAcTVqv5pTFUjh/SP84bq2+2WmZE6bErd+SSGk75GqdqYaqdXn ODDtZVZpqnlA+PY7gXMSwyLqieGlZMIHfi7IVT2SaiVU9kUCCiYMXq/DCzhhGQn2ZQXK0laQ pvCQDDTjBuGt0sjyZ62Vvoehnyp4McMjD/oWL0VuGbfLbcUFFQzcPvjkJTePRuu0DCFT8cL2 NRRy2lFH+iJgCFwCk5M6OjtmwDTtt5FjpnTrZSOWyzLp6ur0EkMaRl85mOiVSHPvJJh2HcWs 1fC4Zrs+G41of3z20iis57RL5xZy6LdwQvzbTS1Jz5EcxzlLQ+nT0QRNLW2PyW6ZLs31opRK ks/XJJIR7NvYr6th6iXE3iCaSEA7SEKmnRH2m7vpaBZYB53JDjpSVlqxPGPGnqxMFyYCxw7/ o+OKd3zjcNdtut9Cv+U77sGmBAAA --Multipart_Fri_Feb_27_23:21:10_1998-1--