lua_newthread останавливается - PullRequest
1 голос
/ 03 декабря 2011

Я работаю в потоке LUA и использую lua_newthread для этого в моем коде, который должен выполнять одну и ту же функцию n раз.

Для работы с потоком соревнования создаем несколько потоков в C ++ идля каждого потока присваивается lua_state это lua_state = lua_newthread.Этот поток уничтожается только в конце приложения, поэтому я всегда повторно использую атрибут lua_state этих потоков.У меня такой вопрос: после некоторого времени выполнения в приложении происходит сбой, это может быть вызвано сборщиком мусора?

В моем последнем приложении я использовал команду lua_gc (thread, LUA_GCSTOP, 0) ино ошибка не исчезла.

Еще одна стратегия, которую я попробовал, заключалась в завершении каждого запуска lua_resume, я добавлял команду lua_settop (thread, 0), чтобы батарея разряжалась и не занимала место в памяти.

Пожалуйста, помогите мне, что может произойти?

1 Ответ

4 голосов
/ 03 декабря 2011

Lua-потоки не похожи на CPU-потоки. Lua не является потокобезопасным; Вы не можете выполнять код Lua параллельно в реальных потоках. Lua допускает совместную многозадачность, но не реальные потоки CPU.

Вы можете вызывать разные фактические lua_State объекты из разных потоков ЦП, но только если они действительно разделены. Если вы создали поток Lua из корня lua_State, то вы не можете вызвать код Lua в этом потоке Lua, одновременно вызывая код Lua в корне lua_State. Если два потока Lua совместно используют одного и того же родителя lua_State, вы не можете одновременно выполнять код Lua для обоих потоков Lua.

Так что вам нужно реструктурировать то, что вы делаете. Вместо использования потока используйте lua_newstate, чтобы создать одно состояние Lua для каждого потока ЦП. Каждый lua_State будет полностью независим от остальных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...