|
Hello,
I’m thinking to migrate my very own home automation tools from 5.1 to 5.3 …
One of the biggest problem I’m facing with Lua is multi-threading : all these tools are events driven, especially, each and every MQTT message arrival triggers a new thread running some Lua code, and this is driven from C side.
On 5.3 documentation, I can read
“Each Lua state has one or more threads, which correspond to independent,
cooperative lines of execution. The type lua_State
(despite its name) refers to a thread. (Indirectly, through the thread,
it also refers to the Lua state associated to the thread.)” but cooperative looks to me it still not real preemptive multi-threading
but still co-routines like, isn’t it ?
In my current application (using Lua 5.1), I’m creating new State for each thread but it create some issues :
* Global variables can’t be used … but frankly speaking, it’s avoiding to deal with concurrent access and I created C side shared object for this which doing the job pretty well.
* More problematic : strings comparison doesn’t work at all
If my_var == “toto”
Will always fails. I got from this list it’s because there is a lookup table to speed up and this table is stick to the main State.
What would be the best solution to avoid this 2nd
nasty issue ? Is implementing lua_(un)lock()
still
the solution in 5.3 ? Does it mean I will have only a single Lua_State shared
with all threads ?
Any better solution
Thanks
Laurent