欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

.NET簡談組件程序設(shè)計之(上下文與同步域)

我們繼續(xù)學(xué)習(xí).NET多線程技術(shù),這篇文章的內(nèi)容可能有點復(fù)雜。在打破常理之后,換一種新的思考模型最為頭疼。這篇文章里面會涉及到一些不太常見的概念,比如:上下文、同步域等等。我也是最近才接觸這些關(guān)于組件編程方面的高深技術(shù),大家一起學(xué)習(xí),再大的困難也是有時間限制的,只要我們堅持。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:主機域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、靈璧網(wǎng)站維護、網(wǎng)站推廣。

在本人的上一篇文章“.NET簡談組件程序設(shè)計之(多線程與并發(fā)管理一)”中,只是初步的帶領(lǐng)我們學(xué)習(xí)一下關(guān)于多線程的一些基本的原理,包括線程切換,線程的開始、執(zhí)行、等待、結(jié)束。

這篇文章的重點是學(xué)習(xí)關(guān)于線程的同步、互斥的機制。在多線程的應(yīng)用程序中,最少會有一個主線程在運行著,如果我們想提高應(yīng)用程序的吞吐量就必須借助多線程的原理來實現(xiàn)。[王清培版權(quán)所有,轉(zhuǎn)載請給出署名]

.NET上下文(ContextBoundObject對象)

什么叫上下文,千萬別和ASP.NET中的上下文搞混了,這個上下文是個形容詞,在不同的場合有不同的意思。在ASP.NET中的上下文是指Context對象,這個對象基本上包容了HTTP協(xié)議的整個生命周期的信息,可以獲取到客戶端瀏覽器的一些基本信息,也可以獲取到關(guān)于HTTP協(xié)議的一些信息,等等。

這里所講的上下文是.NET程序執(zhí)行的最小邏輯范圍,ASP.NET上下文是站在B/S編程模型角度去看待的,而這里的上下文是站在.NET底層運行角度看來的,后者是代碼的上下文,前者是整個生命周期的上下文。

在沒有接觸ContextBoundObject之前我一直以為.NET程序執(zhí)行的最小邏輯范圍是應(yīng)用程序域(AppDomain),知道了之后才知道另有隱情,上下文是用來確定對象的邏輯歸屬,在多線程(Thread)、事物處理(Transaction)、企業(yè)服務(wù)(Enterprise)等方面都需要用上下文來對對象進行規(guī)劃。下面您將看到怎么用上下文來進行線程的同步的。

圖1:

.NET簡談組件程序設(shè)計之(上下文與同步域)

.NET同步域(Synchronization特性)

同步域的概念是來源于多線程的場合,在我們進行多線程操作的時候,讓很多個線程去同時訪問一個內(nèi)存對象的時候,是必須用鎖來保證只有一個線程進入對象操作的,那么同步域的概念就是同步的是一個區(qū)域,而不是單單的一個對象。

線程是代碼的執(zhí)行路徑,只要在這條執(zhí)行路徑上都屬于線程的范圍,那么怎么在執(zhí)行的路徑中分離出另外一個同步區(qū)域。[王清培版權(quán)所有,轉(zhuǎn)載請給出署名]

臨界資源是系統(tǒng)中對同一時間只能由一個線程進行訪問的描述。我們假設(shè)自己就是一個線程,我們要去家里拿點東西,那么門就是線程的同步鎖,當(dāng)我們進去的時候就把門從里面反鎖,出去的時候就把門打開,以方便自己的家人進來。這個房子就是臨界資源??赡苓@樣的描述不太靠譜,哪有這樣的家?。?/p>

圖2:

.NET簡談組件程序設(shè)計之(上下文與同步域)

利用上下文和同步域進行線程的同步

下面我們將結(jié)合上下文和同步域的原理進行線程的同步。請看一段代碼:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. using System.Threading;  
  5. using System.Runtime.Remoting;  
  6. using System.Runtime.Remoting.Contexts;  
  7.  
  8. namespace ConsoleApplication1.多線程和并發(fā)管理  
  9. {  
  10.     //如果不加上下文,那么就是以對象為線程鎖定區(qū)域,如果加上下文,那么就是已邏輯上下文為鎖定區(qū)域 
  11.     [Synchronization(SynchronizationAttribute.REQUIRED, true)]//重新進入同步域 
  12.     public class MyClass : ContextBoundObject  
  13.     {  
  14.         public void DoWork()  
  15.         {  
  16.  
  17.             int i = 0;  
  18.             while (true)  
  19.             {  
  20.                 Console.WriteLine(Thread.CurrentThread.ManagedThreadId + "|" + i++);  
  21.                 if (i == 10)  
  22.                 {  
  23.                     Console.WriteLine("---------------------------------------------");  
  24.                     Console.Read();  
  25.                     break;  
  26.                 }  
  27.             }  
  28.  
  29.         }  
  30.     }  
  31. }  

在這段代碼里面,我給Myclass類加上了Synchronization特性,并且繼承自上下文對象ContextBoundObject。兩者必須集合使用,同步域只有在上下文中才有效。

【MSDN:將 SynchronizationAttribute 應(yīng)用到一個上下文綁定對象會導(dǎo)致創(chuàng)建等待句柄和自動重置事件,這些內(nèi)容不一定會被作為垃圾來回收。因此,不要在很短的時間內(nèi)創(chuàng)建大量用 SynchronizationAttribute 標(biāo)記的上下文綁定對象。】

圖3:

.NET簡談組件程序設(shè)計之(上下文與同步域)  

圖4:

.NET簡談組件程序設(shè)計之(上下文與同步域)

我們來看調(diào)用代碼:

  1. Thread currentthread = Thread.CurrentThread;  
  2.             Console.WriteLine(currentthread.Name + currentthread.ManagedThreadId);  
  3.  
  4.             MyClass myclass = new MyClass();  
  5.  
  6.             Thread thread = new Thread(new ThreadStart(myclass.DoWork));  
  7.  
  8.  
  9.             Thread thread2 = new Thread(new ThreadStart(myclass.DoWork));  
  10.             thread2.Start();  
  11.             thread.Start();  
  12.  
  13.             thread2.Join();  
  14.             thread.Join();  
  15.             Console.WriteLine(currentthread.Name + currentthread.ManagedThreadId);  
  16.             Console.Read(); 

圖5:

.NET簡談組件程序設(shè)計之(上下文與同步域)

我為了方便截圖所以把循環(huán)的數(shù)字設(shè)的比較小,如果你想測試一下,可以把數(shù)字設(shè)的大一點。[王清培版權(quán)所有,轉(zhuǎn)載請給出署名]

在SynchronizationAttribute對象里面有幾個枚舉值,是用來確定是否共享一個同步域的,有興趣的可以自己嘗試,我就不在這里多講了。

總結(jié):同步域和上下文對象是線程自動同步的好方法,但是他鎖定的目標(biāo)太大,難免導(dǎo)致系統(tǒng)的吞吐量下降,所以下面幾篇文章我們將會學(xué)習(xí)怎么使用手動同步來實現(xiàn)更靈活的同步(Monitor、WaitHandler等),從很小的粒度進行鎖定。

文章標(biāo)題:.NET簡談組件程序設(shè)計之(上下文與同步域)
路徑分享:http://chinadenli.net/article6/iegjog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、ChatGPT、Google、營銷型網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
热情的邻居在线中文字幕| 国产毛片对白精品看片| 国产一区二区三区av在线| 国产黄色高清内射熟女视频| 国产精品成人一区二区在线| 亚洲精品福利入口在线| 亚洲内射人妻一区二区| 少妇丰满a一区二区三区| 欧美尤物在线视频91| 中文字幕一区二区三区大片| 东京热电东京热一区二区三区 | 一区二区三区精品人妻| 国产白丝粉嫩av在线免费观看| 亚洲国产成人av毛片国产| 99视频精品免费视频播放| 国产在线不卡中文字幕| 日韩精品区欧美在线一区| 亚洲精品av少妇在线观看| 老司机精品视频在线免费看| 日韩特级黄片免费在线观看| 人人爽夜夜爽夜夜爽精品视频 | 日韩欧美好看的剧情片免费| 欧美一区二区三区五月婷婷| 国产精品欧美一区两区| 久久精品国产99国产免费| 国产a天堂一区二区专区| 亚洲av日韩一区二区三区四区 | 国产一区国产二区在线视频| 亚洲天堂精品一区二区| 色婷婷国产熟妇人妻露脸| 国产午夜免费在线视频| 熟女乱一区二区三区丝袜| 东京热加勒比一区二区三区| 日本精品中文字幕在线视频| 91欧美一区二区三区| 亚洲中文字幕高清乱码毛片| 欧美日韩精品一区二区三区不卡| 久久精品国产亚洲熟女| 亚洲在线观看福利视频| 精品伊人久久大香线蕉综合 | 一二区中文字幕在线观看|