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


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