创建LUA线程的有效方法



关于通过C 游戏引擎在LUA中线程的快速问题...

我想知道创建LUA线程的效率。看起来我们想做的事情并不是我们想做的很多事情,因为每次线程都在创建时都会有Lua块的大副本。所以 -

lua_State *L = luaL_newstate();
luaL_openlibs(L);
lua_State *thread = lua_newthread(L);
luaL_loadfile(thread, "luac1.bin"); // or luaL_loadbuffer or ?
lua_resume(thread, NULL, 0);

新线程始终涉及块数据的复制,当线程结束时,块丢失了。是否有一种有效的方法可以一遍又一遍地产生这些线程?

[编辑]我应该补充一点是这些线程,因为它们可能想在结束之前屈服。

谢谢

您正在寻找的是 lua_xmove:"同一状态不同线程之间的交换值。"

lua_State* L = luaL_newstate();
luaL_openlibs(L);
lua_State* thread1 = lua_newthread(L);
lua_State* thread2 = lua_newthread(L);
// load chunk as a function and copy it to the top of each thread's stack
luaL_loadfile(L, "luac1.bin");
lua_pushvalue(L, -1);
lua_xmove(L, thread1, 1);
lua_pushvalue(L, -1);
lua_xmove(L, thread2, 1);
lua_resume(thread1, NULL, 0);
lua_resume(thread2, NULL, 0);

这样,您只需要加载一次。这些线程都共享同一实例。

最新更新