lua ステート L1 から、登録済みの C 関数 makethread を呼び出します。
static int makethread(lua_State *L1) {
printf("makethread!\n");
pthread_t thread2;
pthread_create( &thread2,NULL,dumb_thread,NULL);
printf("makethread complete!\n");
return 0;
}
このdamum_threadを実行しようとします
void * dumb_thread() {
printf("dumb thread!\n");
lua_State * L2;
L2= luaL_newstate();
lua_close(L2);
printf("dumb thread complete!\n");
return 0;
}
プログラムが終了したように見えますが、lua_close のためにプログラムがフリーズします。すべての print ステートメントが実行されますが、lua ターミナルを再び制御することはできません。また、makethread が完了したと表示されますが、L1 lua 状態のコードは実行されません。これは、L2 を閉じようとして lua がハングアップしたことを示しています。lua_close をコメントアウトすると、メモリ リークがあっても問題ありません。
makethread!
makethread complete!
dumb thread!
dumb thread complete!
しかし、L1 ステートから直接 dump_thread を呼び出すと、
static int calldirectly(lua_State *L1) {
dumb_thread()
return 0;
}
すべてが期待どおりに機能し、lua ターミナルにアクセスできます。lua L1 のさらなるコードが機能します。
このマルチスレッドを機能させるにはどうすればよいですか?