viernes, 22 de agosto de 2008

Threads en ruby

El manejo de threads en ruby es muy sencillo, la creación de threads se basa en pasar un bloque a la creación de un objeto de la clase thread.

#!/usr/bin/ruby

t1 = Thread.new do
10.times do
puts "hello from thread 1"
sleep(0.2)
end
end

t2 = Thread.new do
10.times do
puts "hello from thread 2"
sleep(0.2)
end
end

t1.join
t2.join

Para pasar parámetros se hace de la siguiente forma.

#!/usr/bin/ruby

t1 = Thread.new(1) do |id|
10.times do
puts "hello from thread #{id}"
sleep(0.2)
end
end

t2 = Thread.new(2) do |id|
10.times do
puts "hello from thread #{id}"
sleep(0.2)
end
end

t1.join
t2.join

Para controlar las secciones criticas tan solo hay que cambiar la variable de clase critical a true.

#!/usr/bin/ruby

counter = 0;

t1 = Thread.new do
100000.times do
Thread.critical = true
counter += 1
Thread.critical = false
end
end

t2 = Thread.new do
100000.times do
Thread.critical = true
counter -= 1
Thread.critical = false
end
end

t1.join
t2.join

puts counter

Se pueden consultar los demás métodos de la clase Thread en la documentación oficial.

0 comentarios: