2013-10-02 40 views
2

我使用lua作爲腳本語言來處理我的應用程序中的事件,並且我不想限制用戶編寫短處理程序 - 例如,有人可能想讓一個處理程序運行一個無限循環,而另一個處理程序會中斷第一個處理程序。顯然,lua並不直接支持這種行爲,所以我正在尋找解決方法。Lua中的搶先式多線程

首先,我想避免修改引擎。是否可以設置一個調試鉤子,一旦狀態達到配額就會產生?從文檔來看,它應該不難,但我不知道是否有任何警告。

第二,我可以使用lua_close來終止一個線程,就像我在實際的多線程中那樣嗎?

+0

這是什麼平臺上運行?我建議使用已經內置到您的環境中的線程機制。 –

+0

我很確定試圖從兩個不同的線程操作相同的lua_State會導致不好的事情發生。 – riv

+0

哦,我明白你的意思了。我想有多個lua_States,但讓他們「包裝」一組基礎對象(C結構或C++對象與LuaBind或其他)。根據您的要求以及您希望如何處理鎖定問題,這可能有效。但這很棘手(即你可以自己處理所有的同步問題)。 –

回答

1

我以前做過類似的事情。它完全可能在單獨的Lua狀態下進行多線程。一定要看看luaL_lock()和luaL_unlock()(加上相關的設置/清理),因爲你無疑需要這個設置(一個簡單的互斥量應該可以做到這一點)。

之後,它應該是一個相當簡單的事情,爲您的處理程序創建一個鎖/等待/中斷API。

+0

如果您在單獨的OS線程中運行每個單獨的狀態,則不需要鎖定。 – lhf

+0

如果狀態綁定到相同的根狀態(lua_thread),那麼這絕對是必須的。 – Zeksie