成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解在多線程中使用Lua方法

移動開發(fā) iOS
如果不能在多線程中使用Lua ,這將是Lua一個很大的限制。但是有什么辦法解決這個問題呢?所幸的是lua 提供了多線程支持函數(shù),可以用來解決多線程的問題。

 

多線程中使用Lua方法是本文要介紹的內(nèi)容,大家知道,直到現(xiàn)在的lua 5.1,Lua中的函數(shù)都沒有提供線程安全實現(xiàn)。所以如果在多線程中訪問lua_State 會產(chǎn)生無法預料的結(jié)果。但是現(xiàn)在的應(yīng)用軟件一般都要求采用多線程,來滿足應(yīng)用是的一些要求。

如果不能在多線程中使用Lua ,這將是Lua一個很大的限制。但是有什么辦法解決這個問題呢?所幸的是lua 提供了多線程支持函數(shù),可以用來解決多線程的問題。這五個函數(shù)原型分別如下:

  1. int lua_newthred(lua_State* L)  
  2. int lua_resume(lua_State* L, int nargs)  
  3. int lua_yield(lua_State* L int nresults)  
  4. void lua_lock(lua_State* L)  
  5. void lua_unlock(lua_State* L) 

我們借助以上五個函數(shù),再加上線程同步。基本上能解決Lua在多線程中的應(yīng)用問題。以上五個函數(shù)的具體用法請參考lua開發(fā)指南。在一下例出相應(yīng)代碼,以供大家參考。

1、多線程使用時發(fā)生Lua棧出錯問題,

產(chǎn)生問題的原因:多線程使用同一個lua_State 會導致lua 棧發(fā)生錯亂,引起各種錯誤。

解決方法:可以采用lua_newthread 函數(shù)來生成一份新的棧,防止棧訪問沖突。

解決方法代碼示例如下(在實際使用中需要更小心的維護lua棧訪問沖突,調(diào)用lua_newthread 時也需要同步機制來保護,需要實現(xiàn)lua_lock、lua_unlock ,以確保多線程訪問時不會沖突。 ):

  1.  lua_State* L = lua_newthread(luaMain)  
  2.   ...  
  3.  lua_pushstring(L, str);  
  4. ...  
  5. lua_resume(L, n) 

2、使Lua 腳本暫停執(zhí)行,但又防止宿主程序主線程被卡住問題。

解決辦法:可以在宿主程序中調(diào)用lua_yield函數(shù)來暫停腳本執(zhí)行,待宿主程序執(zhí)行任務(wù)完成的調(diào)用lua_resume 來恢復lua腳本的繼續(xù)執(zhí)行。

示例代碼如下:

  1. C++:  
  2. int show_dialog(void)  
  3. {  
  4. ....  
  5.    lua_pushnumber(L, IDOK);  
  6.     return lua_yield(L, n); \\lua_yield函數(shù)必須放在return 語句后面。  
  7. }  
  8. int end_dialog(void)  
  9. {  
  10. ...  
  11. int ret = lua_resume(L, 0);  
  12. if(ret == LUA_YIELD)  
  13. {  
  14.     int id = lua_tonumber(L, -1);  
  15. }  
  16. return 2;  
  17. }  
  18. Lua:  
  19. ret = show_dialog()  
  20. if ret == 0 then  
  21. end 

小結(jié):詳解在多線程中使用Lua方法的內(nèi)容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2024-01-07 17:29:10

編程語言線程Rust

2013-12-13 17:21:14

Lua腳本語言

2009-10-13 09:56:13

.NET多線程程序

2011-08-10 10:18:22

iPhone多線程線程

2024-03-06 08:40:16

ReactJavascriptUI交互

2011-08-23 09:56:52

UnicodeLua

2011-08-29 15:10:19

JAVALua 腳本

2011-08-16 10:35:59

Objective_C私有方法

2010-04-14 09:20:26

.NET多線程

2012-04-23 10:30:38

Hadoop

2011-06-30 10:50:39

Qt OpenCV

2011-06-28 10:03:37

Qt OpenCV qmake

2009-06-29 18:08:51

Java多線程join方法

2011-08-29 16:16:22

Lua函數(shù)多線程

2022-05-20 10:20:17

Spring事務(wù)MyBatis

2009-06-29 18:32:52

Java多線程Synchronize

2011-08-31 16:22:51

LUA多線程

2009-04-27 13:15:04

多線程方法run()

2011-08-23 17:52:39

LUAWeb 開發(fā)

2021-12-28 09:10:55

Java線程狀態(tài)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲电影第三页 | 亚洲精品1 | 国产色| 精品免费国产视频 | 国产精品毛片久久久久久 | 久久精品亚洲精品国产欧美 | 国产精品2区 | 一区二区三区久久 | 草草视频在线播放 | 天天插天天操 | 男人天堂久久久 | 日本二区在线观看 | 91国内精精品久久久久久婷婷 | 天天草天天射 | 日韩中文一区二区三区 | 欧美福利视频 | 亚洲一区二区在线播放 | 亚洲日日夜夜 | 国产精品国产三级国产a | 久久在线看 | 精品久久久久久久久久久 | 国产精品美女久久久久久免费 | 日本在线观看视频 | 国产精品久久久久久久久久久久久久 | 人碰人操 | 日韩一区二区三区在线看 | 日韩亚洲欧美综合 | 国产精品视频久久久 | 日本a在线| 国产成人99久久亚洲综合精品 | 久久国内精品 | 国产伦精品 | 亚洲图片一区二区三区 | 欧美啪啪网站 | 欧美成人手机在线 | 亚洲精彩视频在线观看 | 91av在线视频观看 | 成人在线视频看看 | 欧美成年网站 | 亚洲国产精品视频 | 成人老司机 |