Creazione di un singolo lua_State
per thread è una buona soluzione per avere più thread di esecuzione Lua. Tuttavia, tali stati sono molto separati. In particolare, è difficile comunicare in modo sicuro tra loro poiché l'API Lua è protetta da thread solo finché si accede a ogni lua_State
da un singolo thread alla volta. (Beh, a meno lua_lock
e lua_unlock
sono implementate come un mutex adatto, che non sono in default costruisce del nucleo lua.)
Se questo livello di isolamento non è accettabile, allora avete bisogno di indagare su uno dei numerosi meccanismi per consentire alle istanze di Lua di giocare bene con gli altri in un processo threaded.
La mia scelta preferita è Lua Lanes che prevede più thread con un meccanismo per passare messaggi e condividere valori tra loro in modo thread-safe. I valori della maggior parte dei tipi Lua (compreso userdata
con un piccolo supporto C laterale della libreria che lo utilizza) possono essere trasferiti in modo sicuro ed efficiente da una corsia all'altra.
Esistono altri meccanismi e un buon punto di partenza per la maggior parte di questi è a wiki page on MultiTaksing dell'utente Lua.