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()