[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: cooperative multitasking
- From: Luiz Henrique de Figueiredo <lhf@...>
- Date: Fri, 7 Jun 2002 08:17:38 -0300
>I am
>interested in concurrent execution of multiple scripts within a LUA state,
>cooperative 'multitasking' that is.
This is implemented in Lua 5.0w0.
Here is an example program by Roberto that finds primes. Sorry for the
comments in Portuguese.
--lhf
-- co-rotina para gerar todos os números de 2 a n
function gen (n)
return coroutine.create(function ()
for i=2,n do coroutine.yield(i) end
end)
end
-- co-rotina que filtra os números gerados por 'g', tirando os múltiplos
-- de 'p'
function filter (p, g)
return coroutine.create(function ()
while 1 do
local n = g()
if n == nil then return end
if math.mod(n, p) ~= 0 then coroutine.yield(n) end
end
end)
end
x = gen(1000) -- gerador inicial
while 1 do
local n = x() -- pega um número
if n == nil then break end -- acabou?
print(n) -- número é primo
x = filter(n, x) -- tira fora seus múltiplos
end