Lua生産者と消費者問題

2661 ワード

(1)Lua協同プログラム(coroutine)はスレッドと比較して類似している:独立したスタック、独立した局所変数、独立した命令ポインタを持ち、同時に他の協同プログラムとグローバル変数とその他の大部分のものを共有する.(2)いずれかの指定された時点で1つの協同プログラムのみが実行され、この実行中の協同プログラムは、明確にアクティブに要求されたときにのみ停止される.他の協同プログラムが実行される機会があります.(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()