今日はLuaではまってしまいました。各オブジェクトに1つのコルーチンを割り当て、オブジェクトごとにスクリプトを走らせているのですが、オブジェクトの数が一定以上になるとハングアップしてしまうという現象に悩まされました。止まる箇所が不定なので、てっきりメモリの解放し忘れや二重解放なのかと思ってチェックしてみましたが特に問題なし。もしかしてメモリが足りなくなったのかと調べてみましたが全然余裕がありました。 ふと思うところがあり、lua_newthread()の説明を読んでみたらそこに答えがありました。lua_newthread()は、スレッドを作成したあと、戻り値として作成したスレッドを返すのと一緒に、そのスレッドをスタックに積むそうです。そしてスタックから削除されてから初めて、スレッドはガーベジコレクとの対象となるそうです。スレッドがガーベジコレクとの対象となるということは覚えていたのですが、