S = State() T = thread(S, [[ print("starting thread...") pcall(function() while true do check_interrupted() -- check if thread was interrupted local ok, val = read(10) -- 10 ms timeout if ok then print("thread received:", val) write(val + 10, val - 10) -- send result back to main thread end end end) ]]) for i = 1, 10 do T:write(10 * i) local r1 = T:read() local r2 = T:read() print("main received: ", r1, r2) end T:interrupt() print("done") -- Channels are quite flexible, we can send closure over the channel T = thread(S, [[ for i = 1, 10 do local f = read() -- send back the result of f(i) write(f(i)) end ]]) for i = 1, 10 do T:write(function (x) return x + i end) print(T:read()) end