2

を使用して Lua スクリプトへの非常に速いペースの呼び出しを実行するプログラムがありますlua_pcall。プログラムが lua スクリプトを呼び出す速度が速すぎると、非常にランダムな場所で問題が発生し、アクセス違反が発生するようです。

ミューテックスを試してみましたが、try/catch で SEH 例外を有効にしても無駄でした。エラー関数が配置されており、適切なリターン コードをすべてチェックしています。問題は、安全に処理された Lua エラーではなく、pcall の奥深くにある実際のアクセス違反です。

多くの場合、ブレークは で発生しますがluaV_execute、他のランダムな場所で発生することもあります。スタックにプッシュされたすべてのパラメーターが有効であることを確認しました。

戻る前に Lua に強制的に呼び出しを完了させる方法、または呼び出しスタックが破損しないようにする方法はありますか?

4

1 に答える 1

5

Lua システムは全体として完全に再入可能ですが、個々のlua_Stateインスタンス自体はスレッド セーフではありません。

複数のスレッドから にアクセスしている場合はlua_State、ミューテックスまたはその他のロック メカニズムを使用して、一度に 1 つのスレッドだけがその状態を操作できるようにする必要があります。同時アクセスは、あなたが目にしている種類の破損を簡単に引き起こす可能性があります.

複数のインスタンスで作業しているlua_State場合、各状態に独自のアクセス ロックを設定できます。Lua ランタイム全体に対して単一のグローバル ロックは必要ありません。

于 2012-11-28T14:14:37.987 に答える