Lua的协程(coroutine)简介

 更新时间:2015年04月23日 10:31:19   投稿:junjie  
这篇文章主要介绍了Lua的协程(coroutine)简介,本文讲解了coroutine的创建、协程的三种状态和yield函数的配合使用等内容,需要的朋友可以参考下

协程和多线程下的线程类似:有自己的堆栈,自己的局部变量,有自己的指令指针,但是和其他协程程序共享全局变量等信息。线程和协程的主要不同在于:多处理器的情况下,概念上来说多线程是同时运行多个线程,而协程是通过协作来完成,任何时刻只有一个协程程序在运行。并且这个在运行的协程只有明确被要求挂起时才会被挂起

你可以使用coroutine.create来创建协程:

复制代码 代码如下:

co = coroutine.create(function ()
     print("hi")
end)

协程有三种状态:挂起,运行,停止。创建后是挂起状态,即不自动运行。status函数可以查看当前状态。协程真正强大的地方在于他可以通过yield函数将一段正在运行的代码挂起。

lua的resume-yield可以互相交换数据

如果没有对应的yield,传递给resume的额外参数将作为参数传递给协程主函数:

复制代码 代码如下:

co = coroutine.create(function (a, b, c)
     print("co", a, b, c)
end)
coroutine.resume(co, 1, 2, 3)

如果没有错误的话,resume将返回true和yield的参数:

复制代码 代码如下:

co = coroutine.create(function (a, b)
     coroutine.yield(a+b, a-b)
end)
print(coroutine.resume(co, 3, 8))

同样地,yield也将返回由对应的resume传递而来的参数:

复制代码 代码如下:

co = coroutine.create (function ()
print("co", coroutine.yield())
end)
coroutine.resume(co)
coroutine.resume(co, 4, 5)

最后,协程主函数返回值将作为与之对应的resume的返回值(第一个参数是true)。

复制代码 代码如下:

co = coroutine.create(function ()
return 6, 7
end)
print(coroutine.resume(co))

(完)

相关文章

  • Lua中if语句嵌套的使用教程

    Lua中if语句嵌套的使用教程

    这篇文章主要介绍了Lua中if语句嵌套的使用教程,是Lua入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • Lua中使用元表(metatable)执行算术类元方法实例

    Lua中使用元表(metatable)执行算术类元方法实例

    这篇文章主要介绍了Lua中使用元表(metatable)执行算术类元方法实例,本文给出了加法、减法、乘法、除法、相反数、取模等内容,需要的朋友可以参考下
    2014-09-09
  • lua+love2d制作的2048游戏

    lua+love2d制作的2048游戏

    前面给大家分享的是一个超级简单版的使用lua实现的2048小游戏的代码,今天我们加上love2d游戏引擎,制作PC版的2048游戏。小伙伴们仔细读读本文吧。
    2015-03-03
  • Lua中实现StringBuffer功能

    Lua中实现StringBuffer功能

    这篇文章主要介绍了Lua中实现StringBuffer功能,本文给出了实现代码和调用代码,需要的朋友可以参考下
    2014-11-11
  • Lua的迭代器使用中应该避免的问题和技巧

    Lua的迭代器使用中应该避免的问题和技巧

    这篇文章主要介绍了Lua的迭代器使用中应该避免的问题和技巧,本文介绍了避免创建闭合函数、利用恒定状态创造更多变量、不需要for循环的迭代器等内容,需要的朋友可以参考下
    2014-09-09
  • Lua判断变量是否为数字、字符串是否可以转换为数字等

    Lua判断变量是否为数字、字符串是否可以转换为数字等

    这篇文章主要介绍了Lua判断变量是否为数字、字符串是否可以转换为数字等,本文讲解了Lua 判断是字符还是数字的方法、Lua判断数字的方法、判断可否转换为数字的方法、判断并且准备一个初值的方法,需要的朋友可以参考下
    2015-04-04
  • Lua教程(二十二):userdata

    Lua教程(二十二):userdata

    这篇文章主要介绍了Lua教程(二十二):userdata,这里我们通过一个简单完整的示例来学习一下Lua中userdata的使用方式,需要的朋友可以参考下
    2015-04-04
  • Lua中的函数写法简明示例

    Lua中的函数写法简明示例

    这篇文章主要介绍了Lua中的函数写法简明示例,本文是一篇个人学习笔记,简单的记录了Lua函数的写法,需要的朋友可以参考下
    2015-04-04
  • 详解Lua中repeat...until循环语句的使用方法

    详解Lua中repeat...until循环语句的使用方法

    这篇文章主要介绍了详解Lua中repeat...until循环语句的使用方法,需要的朋友可以参考下
    2015-05-05
  • Lua利用cjson读写json示例分享

    Lua利用cjson读写json示例分享

    本文结合本人的实际使用经验和代码示例,介绍如何在Lua中对json进行encode和decode,需要的朋友可以参考下
    2014-11-11

最新评论