lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Hey

Depending on your target platform, and since you can only ever have one thread executing Lua at a time, it may be easier to dispatch the work to happen on the main thread. We do this in Hammerspoon (OS X) using Apple's SDK (things like dispatch_sync(), dispatch_async() and [NSObject performSelectorOnMainThread]).

(For the sake of safety, we also perform a sanity check almost every time a C function is about to do some Lua work, to make sure it's happening on the main thread)

Cheers,
Chris

On 28 August 2016 at 11:57, Marc Balmer <marc@msys.ch> wrote:
Does someone on this list have experience with running Lua in a threaded environment?

I am thinking about the following scenario:

- A main thread creates a Lua state and uses it the usual way using the C API.
- A secondary thread should call a function in said Lua state from time to time,
asynchronously and not predictable when it will do so. Totally independent from
the main thread.

It's obvious that this will not work and that some sort of arbitration will be needed.  As
I understand, there is no locking at all in Lua, and not even a function to query if a
Lua state is currently executing Lua code, i.e. if another thread is running the Lua
interpreter.

What's the best approach to this?  I think I will have to add a locking mechanism
and aquire the lock before calling any of the Lua C API functions.  Are there better
ways?





--
Cheers,

Chris