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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Data菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值