Programación en Ruby/Implementación de co-rutinas
El manejo de threads(Corrutinas) 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.
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:
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 críticas tan solo hay que cambiar la variable de clase critical a true:
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