lua协同操作(coroutine)

本文介绍了Lua中的协同程序概念及其与多线程的区别。通过示例展示了协同程序的创建、状态查询及执行过程,并解释了不同状态的意义。同时,还演示了如何在协同程序间传递参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lua中的协同程序类似于多线程,但是与多线程还是有点区别的,区别在于协同程序必须必须合作,且同一时刻只有运行一个协同程序。

 

  1. function p()  
  2.     print("Hello World")  
  3. end  

 

这是一个简单的示例函数,下面看看协同程序的调用

 

  1. co = coroutine.create(p)  
  2. print(co)               --> thread: 003FBBF0  
  3. print(coroutine.status(co))     --> suspended  
  4. coroutine.resume(co)            --> Hello World  
  5. print(coroutine.status(co))     --> dead  

 

在上面的调用代码中,右边附上了打印输出,第一行是创建一个协同程序,第二行查看协同程序的返回值,第三行查看此时协同程序的状态,处于suspended(挂起)状态,第四行执行协同程序,第五行查看此时协同程序状态,处于dead(死亡)状态。

协同程序有四种状态,suspended(挂起)、running(运行)、dead(死亡)、normal(正常),

当调用coroutine.create后,处于挂起状态

调用coroutine.resume后,处于运行状态,执行完毕后,处于死亡状态

当一个协同程序a调用另一个协同程序b后,a就处于正常状态,b处于运行状态

协同程序传递参数:

 

  1. co2 = coroutine.create(function(a, b)  
  2.         coroutine.yield(a * b, a + b)  
  3.     end)  
  4. print(coroutine.resume(co2, 22009))  

 

在resume调用中,除第一个值外,其余值都将传给yield,执行后的返回之中,第一个值为Boolean类型,协同程序运行是否正常,其余的值是对应yield的返回值。

转载于:https://my.oschina.net/tonyyang/blog/12044

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值