バリア同期
復習。
barrier.rb
class Barrier def initialize(ts, n, name=nil) @ts = ts @name = name || self @ts.write([key,n]) end def key @name end def sync tmp, val = @ts.take([key,nil]) @ts.write([key, val - 1]) @ts.read([key, 0]) end end
TupleSpaceをつくるほう、5個で待ち合わせる。
require 'barrier.rb' require 'rinda/tuplespace' $ts = Rinda::TupleSpace.new $barrier = Barrier.new( $ts, 5, "test_barrier") DRb.start_service('druby://localhost:12345', $barrier ) DRb.thread.join
お仕事して待ち合わせるほう
require 'drb/drb' require 'barrier' DRb.start_service $ts = DRbObject.new_with_uri('druby://localhost:12345') $ts.sync
このスクリプトの5個目が実行されると、それまでの4つもふくめて解放されるのね。