调用lua_newthread便可以在一个lua状态中创建其他的线程:
lua_State *lua_newthread(lua_State *L);
这个函数会返还一个lua_State指针,表示新建的线程。它还会将新线程作为一个类型为"thread"的值压入栈中。例如,在执行了以下语句后:
L1 = lua_newthread(L);
拥有了两个线程L1和L,它们内部都引用了相同的Lua状态。每个线程都有其自己的栈。新线程L1以一个空栈开始运行,老线程L的栈顶就是这个新线程:
printf("%d\n", lua_gettop(L1));-->0
print("%d\n", luaL_typename(L, -1));-->thread
除了主线程之外,其他线程和其他lua对象一样都是垃圾回收的对象。当新建一个线程时,线程会压入栈中,这样就能确保新线程不会成为垃圾。