lua-協同程序

--協同程序:相當於同步的多線程,在等待同一個線程鎖的幾個線程有點類似協同。在任意指定時刻只有一個協同程序在運行,
--並且這個正在運行的協同程序只有在明確的被要求掛起的時候纔會被掛起
--coroutine.create()創建 coroutine,返回 coroutine, 參數是一個函數,當和 resume 配合使用的時候就喚醒函數調用
--coroutine.resume()重啓 coroutine,和 create 配合使用
--coroutine.yield() 掛起 coroutine,將 coroutine 設置爲掛起狀態,這個和 resume 配合使用能有很多有用的效果
--coroutine.status()查看 coroutine 的狀態:dead,suspended,running
--coroutine.wrap() 創建 coroutine,返回一個函數,一旦你調用這個函數,就進入 coroutine,和 create 功能重複
--coroutine.running()返回正在跑的 coroutine,一個 coroutine 就是一個線程,當使用running的時候,就是返回一個 corouting 的線程號

--1種方式創建協同
c1= coroutine.create(
	function(i)
	  print(i)
	end
)

coroutine.resume(c1,1) --1
print(coroutine.status(c1)) -- dead

print()

--2種方式創建協同
c2 = coroutine.wrap(
  function(i)
    print(i)
  end
)

c2(1)

print()

--掛起
c3 = coroutine.create(
  function()
    for i=1,10 do
	  print(i)
	  
	  if(i==3)
	  then
	   print(coroutine.status(c3)) --running
	   print(coroutine.running())--thread:XXX
	  end
	  
	  coroutine.yield() --每循環一次,掛起協程
	end
end
)


coroutine.resume(c3) --1
coroutine.resume(c3) --2
coroutine.resume(c3) --3

print(coroutine.status(c3)) -- suspended
print(coroutine.running())


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章