自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談Lua對多線程支持初步體驗(yàn)

移動開發(fā) iOS
Lua對多線程支持初步體驗(yàn)是本文要介紹的內(nèi)容,主要是來了解LUA中多線程的使用,,經(jīng)過反復(fù)的實(shí)驗(yàn)得到的結(jié)果是,lua不支持多線程,如何讓它支持?來看本文內(nèi)容。

Lua多線程支持初步體驗(yàn)是本文要介紹的內(nèi)容,主要是來了解LUA多線程的使用,經(jīng)過反復(fù)的實(shí)驗(yàn)得到的結(jié)果是,lua不支持多線程,安全測試是用的luaInterface.dll接口.目前還沒有測試到底是這個(gè)dll接口不支持,還是lua.dll不支持.目前只能用資源池的方式,來解決這個(gè)問題,效率上感覺一般.

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. using System.Threading;  
  5. namespace Lanlong.Common  
  6. {  
  7.     /// <summary> 
  8.     /// 線程安全對象池  
  9.     /// </summary> 
  10.     /// <typeparam name="T"></typeparam> 
  11.     public class CommonPool<T> 
  12.     {  
  13.         /// <summary> 
  14.         /// 池隊(duì)列,按照先進(jìn)后出的方式獲得對象  
  15.         /// </summary> 
  16.         private Queue<T> FCache = new Queue<T>();  
  17.         /// <summary> 
  18.         /// 獲得池中一個(gè)對象的鎖  
  19.         /// </summary> 
  20.         private static Object FLockGetObject = new Object();  
  21.         /// <summary> 
  22.         /// 設(shè)置初始化池對象,對于一些創(chuàng)建很耗時(shí)間的對象,事先創(chuàng)建比較合適  
  23.         /// </summary> 
  24.         /// <param name="aInitObjectArray"></param> 
  25.         public void SetInitObject(T[] aInitObjectArray)  
  26.         {  
  27.             for (int i = 0; i < aInitObjectArray.Length; i++)  
  28.             {  
  29.                 FCache.Enqueue(aInitObjectArray[i]);  
  30.             }  
  31.         }  
  32.           
  33.         /// <summary> 
  34.         /// 從池中獲得一個(gè)對象  
  35.         /// </summary> 
  36.         /// <returns></returns> 
  37.         public T GetObject()  
  38.         {  
  39.             T result = default(T);  
  40.             // 獲取對象鎖,防止多個(gè)線程同時(shí)從池中獲取對象  
  41.             lock (FLockGetObject)  
  42.             {  
  43.                 // 等待隊(duì)列中有可獲得的對象  
  44.                 if (FCache.Count <= 0)  
  45.                 {  
  46.                     // 睡眠一段時(shí)間,根據(jù)實(shí)際情況更改睡眠時(shí)間,睡眠過短會大量占用cpu資源,此處設(shè)置1是為了測試  
  47.                     //Thread.Sleep(50);  
  48.                     // 返回一個(gè)空對象,減少系統(tǒng)等待,提高性能  
  49.                     return default(T);  
  50.                 }  
  51.                 //鎖定操作隊(duì)列動作,防止在出列時(shí)其它線程會進(jìn)行入列操作  
  52.                 lock (FCache)  
  53.                 {  
  54.                     try  
  55.                     {  
  56.                         result = FCache.Dequeue();  
  57.                     }  
  58.                     catch  
  59.                     {  
  60.                         Console.WriteLine("資源池隊(duì)列取出出現(xiàn)異常.");  
  61.                         GameEventLog.ThreadEroor("資源池隊(duì)列取出出現(xiàn)異常.");  
  62.                     }  
  63.                 }  
  64.             }  
  65.             return result;  
  66.         }  
  67.         /// <summary> 
  68.         /// 返還資源到資源池  
  69.         /// </summary> 
  70.         /// <param name="aObject"></param> 
  71.         public void Return(T aObject)  
  72.         {  
  73.             //鎖定操作隊(duì)列動作,防止在入列時(shí)其它線程會進(jìn)行入列或者出列操作  
  74.             lock (FCache)  
  75.             {  
  76.                 try  
  77.                 {  
  78.                     FCache.Enqueue(aObject);  
  79.                 }  
  80.                 catch  
  81.                 {  
  82.                     Console.WriteLine("資源池隊(duì)列壓棧出現(xiàn)異常");  
  83.                     GameEventLog.ThreadEroor("資源池隊(duì)列壓棧出現(xiàn)異常");  
  84.                 }  
  85.             }  
  86.         }  
  87.         public int Count()  
  88.         {  
  89.             return FCache.Count;  
  90.         }  
  91.     }  

用法如下:
 
 

  1. using System;  
  2. using System.Data;  
  3. using System.Data.Common;  
  4. using System.Collections.Generic;  
  5. using System.Text;  
  6. namespace Lanlong.Game.Task  
  7. {  
  8.     public class task  
  9.     {  
  10.         public static CommonPool<TaskMoudle> LuaPool = new CommonPool<TaskMoudle>();  
  11.         public static void setLuaPool()  
  12.         {  
  13.             if (LuaPool.Count() > 0) return;  
  14.             // 為連接池初始化池中對象列表  
  15.             TaskMoudle[] array = new TaskMoudle[20];  
  16.             for (int i = 0; i < array.Length; i++)  
  17.             {  
  18.                 array[i] = new TaskMoudle();  
  19.             }  
  20.             LuaPool.SetInitObject(array);  
  21.         }  
  22.     }  

小結(jié):淺談Lua多線程支持初步體驗(yàn)的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!

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

2011-07-08 16:43:46

iPhone Cocoa 多線程

2009-02-10 09:53:41

多線程程序設(shè)計(jì)Java

2011-08-02 10:26:59

iOS 多線程 線程

2023-10-06 23:06:01

多線程Python

2011-06-13 10:03:19

Qt 多線程 編程

2021-08-12 14:33:20

Python多線程編程

2011-06-07 17:35:39

iphone 多線程

2019-02-26 11:15:25

進(jìn)程多線程多進(jìn)程

2009-04-24 09:14:20

.NET多線程鎖機(jī)制

2013-12-12 16:30:20

Lua腳本語言

2009-07-17 10:37:05

C#多線程

2011-08-29 16:16:22

Lua函數(shù)多線程

2011-08-31 16:30:19

Lua多線程

2011-06-24 11:03:31

Qt 多線程 線程

2010-07-02 13:23:08

2009-02-12 15:43:38

Windows7體驗(yàn)感想

2011-08-22 17:41:23

LUA 腳本 語言

2010-04-21 14:29:52

Unix 線程

2011-09-05 10:20:21

Sencha ToucAPP

2020-05-08 08:01:11

多線程Redis處理
點(diǎn)贊
收藏

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