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"
@buff=@ts.take([:ciao,nil,nil])[2]
if(@buff!=0)
@buff=@buff.to_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
@buff=@buff.to_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;
on 2010-08-20 12:21
on 2010-08-20 13:56
ho sbagliato a postare il codice della calsse producer ecco quello
giusto:
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"
@buff=@ts.take([:TupleSpace,nil,nil])[2]
if(@buff!=0)
@buff=@buff.to_i-1;
@ts.write[:TupleSpace,@buff];
end
puts "vuoto";
@ts.write([:TupleSpace,'empty',nil]);
end
end
end
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.