Lua Lanes: использование библиотеки C
Мы запускаем библиотеку c, которая тестируется через тестовый скрипт Lua. Это работает нормально, но мы решили, что пришло время для многопоточности. Итак, мы начали реализовывать 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 lanes?
Я использую Lua 5.1