1

私の質問は、Luaスタック(lua_State)を使用してスレッドローカルストレージのようなものを実装する方法ですか?lua状態で保存され、luaスクリプトおよびCAPIからアクセスできる値。

4

1 に答える 1

2

これを行うにはいくつかの方法があります。私はそれについて論文を書きました。Lua Programming Gemsの第 1 章です。

最も簡単な方法は、キーが lua_States で値がスレッド ローカル データであるテーブルをレジストリに作成することです。スレッドが収集されたときにスレッドローカルデータが解放されるように、テーブルのキーを弱くします。

スレッド ローカル データが C ライブラリにのみ必要であり、C ライブラリからアクセスされる場合は、代わりにライブラリの関数の共有上位値に同様のテーブルを保持できます。luaL_setfuncsを使用して、関数を共有アップバリュー テーブルに登録します。この手法を使用する利点は、スレッド ローカル データが C ライブラリ専用であることです。

于 2013-02-09T01:37:05.707 に答える