надеюсь, что у вас хороший день.
Я программировал IRC-чатбота в Lua в последние несколько дней, и, наконец, я хочу начать реализовывать поддержку нескольких серверов.
До сих пор я создал irc-объект для управления каждым сервером, и все эти приятные вещи - теперь у меня проблемы с многопоточностью.
Lua, как вы, наверное, знаете, не имеет встроенной поддержки потоков.LuaLanes и LuaThreads казались наиболее близкими к тому, что я хотел использовать, с точки зрения библиотек.Что заставило меня выбрать LuaLanes, так это то, что LuaThreads требует модифицированного ядра lua.Плюс ко всему, мне понравилась функция lindas в LuaLanes (для последующего использования в плагинах)
В любом случае, у меня возникает проблема, когда вы генерируете полосу с помощью функции middleman
(например), котораязатем вызывает другую функцию sqr
(например).если вы сгенерируете такую функцию, как lanes.gen({globals = _G}, middleman)
, посредник получит доступ ко всему в вашей текущей глобальной области действия, а это именно то, что я хочу.Проблема заключается в том, что если middleman
вызывает sqr
, а sqr
использует что-то из глобальной области видимости, это выдает ошибку, почти как если бы _G
внезапно стал пустым.
Вот пример кода Iудалось бросить вместе, используя мой пример выше:
require 'lanes'
function sqr()
print(5*5)
end
function middleman()
sqr()
end
gen = lanes.gen({globals = _G}, middleman)
print(gen()[1])
выдает ошибку, говорящую:
tc@box:~$ lua lanestrouble.lua
lua: lanestrouble.lua:4: attempt to call global 'print' (a nil value)
stack traceback:
[C]: in function 'error'
./lanes.lua:190: in function <./lanes.lua:136>
lanestrouble.lua:13: in main chunk
[C]: ?
threading.c 399: pthread_cond_destroy(ref) failed, 16 EBUSY
Aborted
tc@box:~$
(кстати, я использую linux)
Однако, если вы измените строку 11 с gen = lanes.gen({globals = _G}, middleman)
на gen = lanes.gen({globals = _G}, sqr)
, она будет работать нормально.
Я проверил, и то же самое произойдет, если вы передадите "*" (или любой другой параметр для "libs_str "параметр) для загрузки библиотек по умолчанию.
Мне бы очень хотелось, чтобы было что-то вроде библиотеки потоков Java для Lua, именно так я и научился использовать потоки.(Я знаю, не самая идеальная среда, я полагаю)
Спасибо, я очень ценю помощь.Тем более что это полностью остановило мою разработку IRC ботов!(