# RINDA Probem

**URL:** <https://www.ruby-forum.com/t/rinda-probem/193610>\
**Category:** Ruby\
**Created:** [August 20, 2010, 1:50pm UTC](https://www.ruby-forum.com/t/rinda-probem/193610 "2010-08-20T13:50:31Z")\
**Posts on this page:** 3\
**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, 1:50pm UTC](https://www.ruby-forum.com/t/rinda-probem/193610/1 "2010-08-20T13:50:31Z")

</div>

Hi guys, can you help to understand?  
I’m sure that i’m making a big mistake but i can’t see it.Now i’m trying  
to implement the producer/consumer algorithm.I created a server class  
that will start a threaded server ring, and a provider class that will  
resister  
the tuple spaces in the server ring.Also i created Producer class and  
the Consumer cLass.Now regardless if the algorithm is a true  
Produce/Consumer, i can’t read from the tuple spaces with the “take”  
method, it seems it cant’ indentify the tuple space .  
PLEASE any one can help me i’m in this trouble since 2 days!  
Below my class’s ruby code.

----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:54pm UTC](https://www.ruby-forum.com/t/rinda-probem/193610/2 "2010-08-20T13:54:51Z")

</div>

sorry previously i postetd a wrong Cosumer class here the right ver

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

---

<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, 3:20pm UTC](https://www.ruby-forum.com/t/rinda-probem/193610/3 "2010-08-20T15:20:45Z")

</div>

On Fri, Aug 20, 2010 at 5:21 PM, Gino F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> ----Main

> require “Searchservice”

missing this code

martin
