Salve mi aiutereste a capire?
Probabilmente sto facendo un errore grossolano ma non riesco a vederlo ,
allora io sto cercando di implemntare una mia interpretazione del
l’algoritmo produttore/cosumatore usando Rinda .
Ho creato una classe server che farà partire un server_ring ed sara
eseguito in thread , una classe provider che registra la tupla ,una
classe produttore e una consumatore.
A prescindere dal funzionamento di tale algoritmo noto che quando vado a
fare il take sebra che non riesca a leggere dallo spazio delle tuple
quindi mancando il matching.
Non riesco a comprendere l’errore se qualcuno di voi mi puo aiutare
grazie!!Sono su questa cosa da 2 gg probabilmente sto facendo una
cappellata e non me ne sto accorgendo ma sono alla frutta.
----server
require ‘rinda/ring’
require ‘rinda/tuplespace’
class Tupleserver
def initialize
end
def start
DRb.start_service
ts = Rinda::TupleSpace.new
Rinda::RingServer.new ts
DRb.thread.join;
end
end
----Provider
require ‘rinda/ring’
require ‘rinda/tuplespace’
class Provider
def initialize
end
def start
DRb.start_service
ts = Rinda::TupleSpace.new
prov = Rinda::RingProvider.new :TupleSpace, ts, ‘Tuple Space’
prov.provide;
DRb.thread.join
end
end
----Consumer
require ‘rinda/ring’
require ‘rinda/tuplespace’
class Consumer
def initialize
DRb.start_service
ring_server = Rinda::RingFinger.primary
ts = ring_server.read([:name, :TupleSpace, nil, nil])[2]
@ts = Rinda::TupleSpaceProxy.new ts
@buff=0;
end
def execute
while true
puts “eccomi sono il consumatore”
@[email protected]([:ciao,nil,nil])[2]
if(@buff!=0)
@[email protected]_i-1;
@ts.write[:ciao,@buff];
end
puts “vuoto”;
@ts.write([:ciao,‘empty’,nil]);
end
end
end
----Producer
require ‘rinda/ring’
require ‘rinda/tuplespace’
class Producer
def initialize
DRb.start_service
ring_server = Rinda::RingFinger.primary
ts = ring_server.read([:name,:TupleSpace, nil, nil])[2]
@ts = Rinda::TupleSpaceProxy.new ts
@buff=0;
end
def execute
while true
while @buff!=10
@[email protected]_i+1;
end
puts “avverto che è pieno”
@ts.write([:TupleSpace,@buff,nil]);
puts"aspetto che sia vuoto"
@ts.take([:TupleSpace,‘empty’,nil])[1];
@buff=0;
end
end
end
----Main
require ‘rinda/ring’
require ‘rinda/tuplespace’
require “Tupleserver”;
require “Producer”;
require “Consumer”;
require “Provider”
require “Searchservice”
server=Tupleserver.new;
Thread.new{server.start()};
provider=Provider.new;
Thread.new{provider.start()}
Searchservice.new;
producer=Producer.new;
consumer1=Consumer.new;
consumer2=Consumer.new;
t1=Thread.new{producer.execute()};
t2=Thread.new{consumer1.execute()};
t3=Thread.new{consumer2.execute()};
t1.join;
t2.join;
t3.join;