Spre deosebire de limbajele care folosesc fire paralele la nivel de sistem de operare (threads preemtive cu blocaje și mutex-uri), Lua oferă corutine cooperative. O corutină este un fir de execuție cu propria stivă de apeluri, dar care nu este întrerupt niciodată forțat: ea cedează controlul în mod voluntar apelând coroutine.yield() și este reluată ulterior de unde a rămas prin coroutine.resume().
Producător – Consumator implementat cu corutine Lua
-- Funcție producător care generează valori pe rând:
local function generatorNumere()
for i = 1, 3 do
print(string.format(" [Producător] Calculez valoarea %d...", i))
coroutine.yield(i * 10) -- Pauzează execuția și transmite valoarea afară
end
return "FINALIZAT"
end
-- Crearea corutinei:
local co = coroutine.create(generatorNumere)
print("Starea inițială:", coroutine.status(co)) -- "suspended"
-- Reluarea execuției pas cu pas:
local succes1, valoare1 = coroutine.resume(co)
print("Valoare primită 1:", valoare1) -- 10
local succes2, valoare2 = coroutine.resume(co)
print("Valoare primită 2:", valoare2) -- 20
local succes3, valoare3 = coroutine.resume(co)
print("Valoare primită 3:", valoare3) -- 30
local succes4, rezultatFinal = coroutine.resume(co)
print("Rezultat final:", rezultatFinal) -- "FINALIZAT"
print("Stare finală:", coroutine.status(co)) -- "dead"