实现
#!/usr/local/bin/lua function send(x) coroutine.yield(x) end --[[ -- 生产者 -- 创建一个coroutine,生产、停止生产、发送商品 --]] function producer() return coroutine.create(function() while true do local x = io.read() -- 生产商品 send(x) -- 停止生产、返回商品 end end) end function receive(prod) local status, value = coroutine.resume(prod) return value end function filter(prod) return coroutine.create(function() for line = 1, math.huge do local x = receive(prod) x = string.format("%5d %s", line, x) send(x) end end) end --[[ -- 消费者一直循环,当需要消费就唤醒生产者 --]] function consumer(prod) while true do local x = receive(prod) -- filter coroutine io.write(x, "\n") end end consumer(filter(producer()))
输出
lua 1 lua c++ 2 c++ py 3 py • 1 • 2 • 3 • 4 • 5 • 6
结语
Lua还在精进中,期待您的关注~~