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

时间:2016-07-15 20:53:12

标签: c++ multithreading lua

我想将Lua脚本加载到我的C ++程序中,然后在不同的线程中多次调用该脚本。我试图避免在每个线程中加载脚本(为什么要经历这种开销)。

我在C ++程序中正在考虑这样的事情:

create lua state L
load script into L

并在n个线程中执行:

create local lua state Si   (i = 1..n, i.e., separate state per thread)
grab "compiled" script from L and invoke in the context in Si

这样做有“标准”方法吗?主要目标是避免让每个线程加载脚本。脚本也可以在状态Si中执行多次。请注意,在不同线程中运行的脚本不合作(即,他们对彼此一无所知,我们希望保持这种方式)。

1 个答案:

答案 0 :(得分:1)

正如我在评论中所说的那样,我不认为你可以用c ++线程做你想做的事情而没有阻止所有并行执行的数据竞争或互斥。 单个lua状态似乎不被设计为由多个线程使用,并且lua线程也不支持多线程,并且无法将数据从完全独立的状态移动到另一个状态。

然而你可以尝试的是"编译"通过执行loadstring然后dump处理状态的lua脚本并以安全的方式保存它,以便您可以从所有线程访问它以使用loadstring直接从字节码加载脚本。

否则你需要将所有状态分开并通过C ++进行所有状态的通信,并确保那里的线程安全。