Lua生产者与消费者问题

(1)Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。
(2)在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只有在明确的被主动要求挂起的时候才会被挂起。其它协同程序才有机会执行。
(3)协调程序创建后,默认是挂起的,调用resume()方法后才算启动

--生产者消费者问题
local newProductor

--生产
function productor()
    local i = 0
    while true do
        i = i + 1
        send(i)             --将生产的物品发给消费者
    end
end

--消费
function consumer()
    while true do
        local i = recieve()     --从生产者哪里拿到物品
        print(i)
    end
end

--从生产者哪里得到物品的方法
function recieve()
    local status,value = coroutine.resume(newProductor)
    return value
end

--生产者把物品发送给消费者的方法
function send(x)
    coroutine.yield(x)      --生产者把值发送出去之后,就把自己的这个协同程序给挂起
end

--启动程序
newProductor = coroutine.create(productor)      --创建协同程序newProductor,(创建时执行productor()方法)
consumer()

你可能感兴趣的:(Lua)