まずipsjメソッドの方。
require 'rinda/rinda' DRb.start_service size = (ARGV.shift || '5').to_i ro = DRbObject.new_with_uri('druby://localhost:12345') ts = Rinda::TupleSpaceProxy.new(ro) size.times do |r1| size.times do |r2| ts.write([:nq, size, r1, r2]) end end found = 0 size.times do |r1| size.times do |r2| tuple = ts.take([:nq_ans, size, r1, r2, nil]) found += tuple[4] end end puts found
そして仕事をする方(nq2)。
require 'rinda/rinda' require 'nq' DRb.start_service ro = DRbObject.new_with_uri('druby://localhost:12345') ts = Rinda::TupleSpaceProxy.new(ro) while true symbol, size, r1, r2 = ts.take([:nq, nil, nil, nil]) found = NQueen.new.nq2(size, r1, r2) ts.write([:nq_ans, size, r1, r2, found]) end
どうでもいいけどTupleSpaceサーバ。
require 'rinda/tuplespace' ts = Rinda::TupleSpace.new DRb.start_service('druby://localhost:12345', ts) DRb.thread.join