# Problema con RINDA

**URL:** <https://www.ruby-forum.com/t/problema-con-rinda/193603>\
**Category:** IT\
**Created:** [August 20, 2010, 12:21pm UTC](https://www.ruby-forum.com/t/problema-con-rinda/193603 "2010-08-20T12:21:13Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![slayer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/96bed5/32.png) [@slayer](https://www.ruby-forum.com/u/slayer)\
**Post date:** [August 20, 2010, 12:21pm UTC](https://www.ruby-forum.com/t/problema-con-rinda/193603/1 "2010-08-20T12:21:13Z")

</div>

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;

---

<div class="post-metadata">

**Author:** ![slayer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/96bed5/32.png) [@slayer](https://www.ruby-forum.com/u/slayer)\
**Post date:** [August 20, 2010, 1:56pm UTC](https://www.ruby-forum.com/t/problema-con-rinda/193603/2 "2010-08-20T13:56:00Z")

</div>

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
