Lua协同(lua下多线程的编写)

首先我们建立个工程,然后紧接着还是附上我调试过的代码,很简单吧。

co这个东西是我们自己定义的一个名字而已,你可以换成任何一个,见过其他动态语言的人都知道,这句废话是给那些和我一样对c++熟悉的一塌糊涂,而对其他语言一无所知的人们。代码如下:

co = coroutine.create(function ()

print("hi")

end)

print(co)
print(coroutine.status(co))

这段代码用来创建一个协同的执行函数,当然采用最简单输出hi这个单词,首先我来说明将co打印出来可以看到一个地址,然后下面可以看到suspended这个东西,如图:

 

这个地址代表着线程地址,suspended代表当前该线程属于被挂起的状态。当然调试工具依然是上篇文章中的那个LuaEdit;下载地址大家也可以从那看到,这里就不再贴出来了。

下面我们再加点代码然后再次查看输出,在这个东西的后边加入如下代码:

coroutine.resume(co)
print(coroutine.status(co))

然后解释下第一句是让线程继续运行,第二句是查看线程状态,输出就变成了这样,如图:

 

细心的你一定发现怎么会是dead呢,线程不是应该是运行状态嘛,怎么会成为死亡的状态,如果你了解操作系统,这就很好解释了,因为他已经执行完了,我们知道输出个东西,任何语言都是很快的,快到你无法想象,好了不开玩笑了。我们怎么才能看到running这个状态呢?你也许会说我们加个循环然后打印出它的状态,比如你把代码改写成了这样,如下示例:

co = coroutine.create(function ()

for i=1,100 do
print("hi")
end
end)

print(co)
print(coroutine.status(co))

coroutine.resume(co)
print(coroutine.status(co))

结果你发现依然打印出来的是dead,因为lua中的多线程并不是真正的多线程,不可能有两个线程在同一时刻运行(不是同时而是同一时刻,学过操作系统的童鞋都知道,不多废话了)。

怎样才能打印出这个running呢?其实很简单,只要你这样添加一行代码就行了,如下:

co = coroutine.create(function ()
print(coroutine.status(co))
for i=1,10 do
print("hi")
end
end)

print(co)
print(coroutine.status(co))

coroutine.resume(co)
print(coroutine.status(co))

然后你就可以看到running这个东西了,如下图:

 

今天的内容就到了这里,就不一次说那么多了,说那么多对大家的理解也不太好。

你可能感兴趣的:(多线程,lua,c/c++,c++)