3
從我的lua狀態L1中,我調用了我註冊的c函數makethread。修改後的lua:Lua_close凍結在pthread中
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;
}
,它試圖運行此dumb_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的。所有的打印語句都會觸發,但我再也無法控制我的lua終端。另外,雖然它說,makethread完成,但我的L1 lua狀態下的其他代碼不會運行。對我來說,這表明lua掛機試圖關閉L2。如果我註釋掉lua_close,即使內存泄漏,一切都很好。
makethread!
makethread complete!
dumb thread!
dumb thread complete!
但是,如果我直接從我的L1狀態調用dumb_thread,
static int calldirectly(lua_State *L1) {
dumb_thread()
return 0;
}
一切正常,我有機會到我的LUA終端。 lua L1中的其他代碼有效。
我可以做些什麼來使這個多線程工作?
也許你想編輯您的問題的標題表明,這是關於修改的Lua,不遺餘力別人,如果他們有類似的問題的答案不是對他們有用的失望。否則刪除問題。 – llogiq