Создание одного lua_State
на поток - хорошее решение для нескольких потоков исполнения Lua. Однако эти состояния очень разделены. В частности, между ними трудно безопасно обмениваться данными, поскольку Lua API является поточно-ориентированным, поскольку каждый lua_State
доступен из одного потока за раз. (Ну, разве что lua_lock
и lua_unlock
реализованы как подходящий мьютекс, которого нет в сборках по умолчанию ядра lua.)
Если этот уровень изоляции неприемлем, вам нужно исследовать один из нескольких механизмов, позволяющих экземплярам Lua хорошо играть с другими в многопоточном процессе.
Мой любимый выбор - Lua Lanes , который предусматривает несколько потоков, а также механизм для передачи сообщений и совместного использования значений между ними потокобезопасным способом. Значения большинства типов Lua (включая userdata
с небольшой поддержкой на стороне C из библиотеки, которая его использует) могут безопасно и эффективно передаваться из одной полосы в другую.
Существуют и другие механизмы, и хорошей отправной точкой для большинства из них является вики-страница пользователя Lua на MultiTaksing .