Das Erstellen einer einzigen lua_State
pro Thread ist eine gute Lösung für mehrere Threads von Lua Ausführung. Diese Zustände sind jedoch sehr getrennt. Insbesondere ist es schwierig, sicher zwischen ihnen zu kommunizieren, da die Lua-API nur Thread-sicher ist, solange auf jeden einzelnen Thread gleichzeitig zugegriffen wird. (Na ja, es sei denn, lua_lock
und lua_unlock
als geeignete Mutex implementiert sind, die sie nicht in der Standard-Builds des lua Kern.)
Wenn das Niveau der Isolation nicht akzeptabel ist, dann müssen Sie eine der mehreren untersuchen Mechanismen, mit denen Lua-Instanzen in einem Thread-Prozess gut mit anderen spielen können.
Meine bevorzugte Wahl ist Lua Lanes, die für mehrere Threads zusammen mit einem Mechanismus zum Übergeben von Nachrichten und Teilen von Werten zwischen ihnen in einer thread-sicheren Weise bietet. Werte der meisten Lua-Typen (einschließlich userdata
mit einer kleinen C-Seiten-Unterstützung von der Bibliothek, die sie verwendet) können sicher und effizient von einer Spur zu einer anderen übertragen werden.
Andere Mechanismen existieren, und ein guter Ausgangspunkt für die meisten von ihnen ist am Lua Benutzer wiki page on MultiTaksing.