一次加载 Lua 脚本,在多个状态和多个线程中执行

我想将一个 Lua 脚本加载到我的 C++ 程序中,并在单独的线程中多次调用该脚本。我试图避免在每个线程中加载脚本(为什么要经过那样的开销呢)。

我在 C++ 程序中考虑了以下内容:

创建 Lua 状态 L
将脚本加载到 L

并在 n 个线程中执行以下操作:

创建本地的 Lua 状态 Si(i = 1..n,即每个线程一个单独的状态)
从 L 获取 “compiled” 脚本并在 Si 的上下文中调用

是否有“标准”方法来执行此操作? 主要目标是避免每个线程加载脚本。脚本也可能在状态 Si 中多次执行。请注意,运行在单独线程中的脚本没有合作(即它们互相不认识,我们希望保持这种状态)。

点赞
用户3586583
用户3586583

正如我在评论中所说,我认为在没有数据竞态或阻止所有并行执行的互斥体的情况下,您不能使用c++线程做到自己想要的事。

单个lua状态似乎并不适用于多个线程,lua线程也不支持多线程,也没有办法通过魔法从完全分离的状态中移动数据到另一个状态中。

然而,您可以尝试通过luaL_loadstringlua_dump在状态上“编译”lua脚本,并以安全的方式保存它们,以便您可以从所有线程访问它们,并直接使用loadstring从字节码中更快地加载脚本。

否则,您需要保持所有状态分离,并通过C ++进行所有通信,并确保线程安全。

2016-07-15 21:19:29