gpt4 book ai didi

c++ - 一次加载Lua脚本,多线程多状态执行

转载 作者:行者123 更新时间:2023-11-30 05:25:11 25 4
gpt4 key购买 nike

我想将一个 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 下执行多次。请注意,在单独的线程中运行的脚本并不协作(即,它们彼此之间一无所知,我们希望保持这种状态)。

最佳答案

正如我在评论中所说,我认为如果没有数据争用或互斥体阻止所有并行执行,您将无法使用 C++ 线程做您想做的事。单个 lua 状态似乎不是为多个线程使用而设计的,而且 lua 线程也不支持多线程,并且没有办法神奇地将数据从一个完全独立的状态移动到另一个状态。

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

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

关于c++ - 一次加载Lua脚本,多线程多状态执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38404845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com