ドキュメントから、作成された新しいスレッドは、使用前に適切に固定する必要があることを理解しています。そのために、レジストリに新しいスレッドへの参照を保持したい( Table[thread-addr] = thread
) そのために、次のようにしています。
lua_State *L = NULL;
lua_State *L1 = NULL;
int tref = LUA_NOREF;
L = luaL_newstate(); // main lua thread/state
// create a table in registry: Table[thr-addr] = Thread
lua_newtable(L);
tref = luaL_ref(L, LUA_REGISTRYINDEX);
lua_pop(L, 1);
L1 = lua_newthread(L);
// Anchor it
lua_rawgeti(L, LUA_REGISTRYINDEX, tref);
lua_pushnumber(L, (ptrdiff_t) L1);
lua_pushlightuserdata(L, L1);
lua_settable(L, -3);
スレッドの処理が完了したら、Table[thread-addr] = nil
Is this enough ?を設定する予定です。または、弱いキー/値を使用して、メタテーブルも設定する必要がありますか?
ありがとう。