細(xì)說(shuō)多線(xiàn)程(八) —— 計(jì)時(shí)器與鎖 |
發(fā)布時(shí)間: 2012/9/16 6:40:51 |
目錄 三、以ThreadStart方式實(shí)現(xiàn)多線(xiàn)程 八、定時(shí)器與鎖 8.1定時(shí)器 若要長(zhǎng)期定時(shí)進(jìn)行一些工作,比如像郵箱更新,實(shí)時(shí)收聽(tīng)信息等等,可以利用定時(shí)器Timer進(jìn)行操作。 開(kāi)發(fā)實(shí)例 class Program { static void Main(string[] args) { ThreadPool.SetMaxThreads(1000, 1000); TimerCallback callback = new TimerCallback(ThreadPoolMessage); Timer t = new Timer(callback,"Hello Jack! ", 0, 1000); Console.ReadKey(); } //顯示線(xiàn)程池現(xiàn)狀 注意觀(guān)察運(yùn)行結(jié)果,每次調(diào)用Timer綁定的方法時(shí)不一定是使用同一線(xiàn)程,但線(xiàn)程都會(huì)是來(lái)自工作者線(xiàn)程的后臺(tái)線(xiàn)程。
在使用多線(xiàn)程開(kāi)發(fā)時(shí),存在一定的共用數(shù)據(jù),為了避免多線(xiàn)程同時(shí)操作同一數(shù)據(jù),.NET提供了lock、Monitor、Interlocked等多個(gè)鎖定數(shù)據(jù)的方式。 8.2.1 lock lock的使用比較簡(jiǎn)單,如果需要鎖定某個(gè)對(duì)象時(shí),可以直接使用lock(this)的方式。 1 private void Method() 2 { 3 lock(this) 4 { 5 //在此進(jìn)行的操作能保證在同一時(shí)間內(nèi)只有一個(gè)線(xiàn)程對(duì)此對(duì)象操作 如果操作只鎖定某段代碼,可以事先建立一個(gè)object對(duì)象,并對(duì)此對(duì)象進(jìn)行操作鎖定,這也是.net提倡的鎖定用法。 class Control { private object obj=new object(); public void Method() { lock(obj) {.......} } }
8.2.2 Montior Montior存在于System.Thread命名空間內(nèi),相比lock,Montior使用更靈活。 1 class Control 2 { 3 private object obj=new object(); 4 5 public void Method() 6 { 7 Monitor.Enter(obj); 8 try 9 {......} 10 catch(Excetion ex) 11 {......} 12 finally 13 { 14 Monitor.Exit(obj); 15 } 16 } 17 } 18 使用try的方式,能確保程序不會(huì)因死鎖而釋放出異常!
8.2.3 Interlocked Interlocked存在于System.Thread命名空間內(nèi),它的操作比Monitor使用更簡(jiǎn)單。 Increment、Decrement 可以使參數(shù)安全地加1或減1并返回遞增后的新值。 class Example { private int a=1; public void AddOne() { int newA=Interlocked.Increment(ref a); } } Exchange可以安全地變量賦值。 1 public void SetData() 2 { 3 Interlocked.Exchange(ref a,100); 4 } CompareExchange使用特別方便,它相當(dāng)于if的用法,當(dāng)a等于1時(shí),則把100賦值給a。 public void CompareAndExchange() { Interlocked.CompareExchange(ref a,100,1); }
熟悉掌握多線(xiàn)程開(kāi)發(fā),對(duì)提高系統(tǒng)工作效率非常有幫助,尤其是回調(diào)方法與最近火熱的并行編程更應(yīng)該引起各位的重視。 本文出自:億恩科技【www.cmtents.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |