3

我们正在运行一个通过 Lua 测试脚本进行测试的 c 库。这运行良好,但我们决定是时候进行一些多线程了。所以我们开始实现 Lua Lanes,但在为线程加载 C lib 时遇到了困难。

所以我们有一个函数测试,这是实际的测试套件函数(它运行所有其他函数),作为开始,我尝试将它推送到一个单独的线程,通过这样调用它:

local pwlog = require "pwlog"
--A milion lines of code, one of which is the test function
testF = lanes.gen("*", {required = {"pwlog"}}, tests)()

需要明确的是:local pwlog不是在函数中定义,而是全局定义。

我基于此:https ://github.com/LuaLanes/lanes/issues/108 ,但我发现很难弄清楚他到底在说什么。好吧,这是错误的:

lua: /usr/local/share/lua/5.1/lanes.lua:327: main: function 'pwlogs/block_size' not found in Lane #0x2390770 destination transfer database

好吧,所以我尝试了一些不同的东西。我在测试函数的顶部添加了一行:

local function tests ()
    pwlog = require "pwlog"
    print("test")
--etc

我改变了调用:

testF = lanes.gen("*", tests)()

我以为这会奏效。在创建线程之前,这里的 pwlog 不存在,所以我认为一切都会好起来的。但它返回了一个非常令人费解的错误:

lua: /usr/local/share/lua/5.1/lanes.lua:327: can't copy non-deep full userdata across lanes

此错误在以下行中引发:

testF = lanes.gen("*", tests)()

所以现在我被卡住了。我应该如何将 C 函数加载到我的 lua 通道线程中?

我正在使用 Lua 5.1

4

0 回答 0