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

0 ответов

Другие вопросы по тегам