Lua丨協同函式

2021-08-27 14:22:17 字數 1136 閱讀 7819

--取得協同函式的返回值

co=coroutine.create(

function (a,b)

print(a+b)

print(a-b)

coroutine.yield(a*b+1,a-1)

print("hello")

return a

end)--第乙個數永遠是是否啟動(返回true、false),第二個數則為函式return返回值

--無法取得協同之後return的值,但可以在yield裡面定義輸出的值

--呼叫coroutine.resume(),不必再次賦值,即可將掛起的協同函式繼續往下執行

res1,res2,res3,res4=coroutine.resume(co,10,40)

print(res1,res2,res3,res4)

print("next")

coroutine.resume(co)

coroutine.status()

檢視coroutine的狀態

注:coroutine的狀態有三種:dead(執行完畢),suspend(暫停狀態),running(正在執行),具體什麼時候有這樣的狀態請參考下面的程式

--取得協同函式的返回值

co=coroutine.create(

function (a,b)

print(a+b)

print(coroutine.running())

print(a-b)

coroutine.yield(a*b+1,a-1)

print("hello")

return a

end)print(coroutine.running())

res1,res2,res3,res4=coroutine.resume(co,10,40)

coroutine.resume(co)

print(coroutine.running())

>lua -e "io.stdout:setvbuf 'no'" "lua.lua"

nil50

thread: 00a6d200

-30hello

nil>exit code: 0

lua協同程式

co coroutine.create function a print co a end coroutine.resume co,1,2,3 co 1 co coroutine.create function a,b coroutine.yield a b,a b end 在resume呼叫的返回...

初識lua協同程式

協程類似與執行緒,但與執行緒不同,執行緒可以多個執行緒同時執行,但是協程需要彼此協作的執行,乙個具有多個協程的程式任意時刻只能執行乙個協程,並且在執行協程只會在其顯示地要求掛起時,才會暫停。乙個協程有4種不同的狀態 掛起,執行,死亡和正常。建立乙個協程時,他處於掛起狀態。coroutine.stat...

lua協同程式理解

參考 協程和多執行緒下的執行緒類似 有自己的堆疊,自己的區域性變數,有自己的指令指標,但是和其他協程程式共享全域性變數等資訊。執行緒和協程的主要不同在於 多處理器的情況下,概念上來說多執行緒是同時執行多個執行緒,而協程是通過協作來完成,任何時刻只有乙個協程程式在執行。並且這個在執行的協程只有明確被要...