Lua itself doesn't have threads that run concurrently, what it has is coroutines, that is a form of cooperative multitasking - you manage when to yield. Hovewer, most common type of thread implementation is mutexing Lua state, and it is equivalent to GIL. You are better to run multiple Lua states (that communicate via host code) concurrently rather running your threads in the same single Lua state.
It was thus said that the Great Jim once stated:
> i recently learned that the CPython interpreter uses a
> global interpreter lock. i suppose Lua does not, right ?
Not one by default. And as long as you keep on system thread, one Lua
state, there is no need for one. If, however, you want to share a Lua state
among system threads, you'll need to recompile Lua with an implementation
for the two given functions: