我们正在运行一个通过 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