[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Which Lua API calls are safe for different Lua States in different	threads?
 
- From: Graham Wakefield <lists@...>
 
- Date: Sat, 13 Jan 2007 11:55:58 -0800
 
Hi,
I'd like to know which operations upon a lua_State * (i.e. which Lua  
C API calls) are safe to make on child lua_State *s in different OS  
threads.
Here's the scenario:
I create a parent lua_State * in the main OS thread, load in  
libraries etc.  I won't actually call functions in this state, it is  
just a parent.
Then for each OS thread, I create its own child lua_State * of the  
parent state using lua_newthread().  Most API operations (lua_push... 
(), lua_to...() etc) seem to be safe to be made without affecting the  
other lua_States and despite thread interruption.
For any Lua API calls that are global to parent & child states, I use  
a mutex lock (e.g. lua_gc).
I am very careful about using lua_xmove between the states, by using  
an intermediate lua_State * as a kind of buffer, and the mutex lock.
I would like to know, of all the API, which API calls are safe within  
a different OS thread, and which will affect both lua_State *s no  
matter which is called (and therefore should use locks).   
Essentially, because I know that my threads interrupt very  
frequently, I really want to minimize the use of and duration of locks.