I think perhaps you are not implementing lua_lock() and lua_unlock() correctly. The lua_state is always passed as a parameter into these functions, so that locks do NOT have to be shared between different universes.
Possibly, but I'm just following the Thread Tutorial on the users wiki:
"Avoid the mistake of associating
the mutex with a specific Lua state."