歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Lua協同機制詳解

Lua協同機制詳解

日期:2017/3/1 10:06:44   编辑:Linux編程

寫點簡單的控制線程掛起的操作,coroutine.yield()這個函數的使用,從協同的觀點看:使用函數yield可以使程序掛起,當我們激活被掛起的程序時,將從函數yield的位置繼續執行程序,直到再次遇到yield或程序結束。首先我們先看一段代碼,如下:

co = coroutine.create(function ()
for i=1,10 do
print("co",i)
coroutine.yield()
end
end)

coroutine.resume(co)
print(coroutine.status(co))

這段代碼比較簡單,高手就不用來這裡,呵呵,偶也是一個初學者,大家新手入門的話可以關注本博客,隨時查看一下這些內容,coroutine.yield()其中這句話負責將正在運行的東西掛起,我們打印出它的狀態可以看到如下結果,如圖:

然後我們再繼續添加一些代碼,代碼如下:

coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
print(coroutine.resume(co))

我們把已經結束的線程再繼續的時候就出現以下情況,上面的代碼只是為了展示給大家會出現什麼結果,結果如下圖:

我們可以看到最後打印出一個 :cannot resume dead coroutine(不能繼續運行一個已經死亡的線程)。

注意:resume運行在保護模式下,因此,如果協同程序內部存在錯誤,Lua並不會拋出錯誤,而是將錯誤返回給resume函數。

Copyright © Linux教程網 All Rights Reserved