青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

cc

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  38 隨筆 :: 14 文章 :: 21 評論 :: 0 Trackbacks

以下各節(jié)描述了在多線程應用程序中可以用來同步資源訪問的功能和類。

在應用程序中使用多個線程的一個好處是每個線程都可以異步執(zhí)行。對于 Windows 應用程序,耗時的任務可以在后臺執(zhí)行,而使應用程序窗口和控件保持響應。對于服務器應用程序,多線程處理提供了用不同線程處理每個傳入請求的能力。否則,在完全滿足前一個請求之前,將無法處理每個新請求。

然而,線程的異步特性意味著必須協(xié)調(diào)對資源(如文件句柄、網(wǎng)絡連接和內(nèi)存)的訪問。否則,兩個或更多的線程可能在同一時間訪問相同的資源,而每個線程都不知道其他線程的操作。結(jié)果將產(chǎn)生不可預知的數(shù)據(jù)損壞。

對于整數(shù)數(shù)據(jù)類型的簡單操作,可以用 Interlocked 類的成員來實現(xiàn)線程同步。對于其他所有數(shù)據(jù)類型和非線程安全的資源,只有使用本主題中的結(jié)構(gòu)才能安全地執(zhí)行多線程處理。

有關(guān)多線程編程的背景信息,請參見:

lock 關(guān)鍵字可以用來確保代碼塊完成運行,而不會被其他線程中斷。這是通過在代碼塊運行期間為給定對象獲取互斥鎖來實現(xiàn)的。

lock 語句以關(guān)鍵字 lock 開頭,它有一個作為參數(shù)的對象,在該參數(shù)的后面還有一個一次只能由一個線程執(zhí)行的代碼塊。例如:

public void Function()
{
System.Object lockThis = new System.Object();
lock(lockThis)
{
// Access thread-sensitive resources.
}
}

提供給 lock 關(guān)鍵字的參數(shù)必須為基于引用類型的對象,該對象用來定義鎖的范圍。在上例中,鎖的范圍限定為此函數(shù),因為函數(shù)外不存在任何對該對象的引用。嚴格地說,提供給 lock 的對象只是用來唯一地標識由多個線程共享的資源,所以它可以是任意類實例。然而,實際上,此對象通常表示需要進行線程同步的資源。例如,如果一個容器對象將被多個線程使用,則可以將該容器傳遞給 lock,而 lock 后面的同步代碼塊將訪問該容器。只要其他線程在訪問該容器前先鎖定該容器,則對該對象的訪問將是安全同步的。

通常,最好避免鎖定 public 類型或鎖定不受應用程序控制的對象實例。例如,如果該實例可以被公開訪問,則 lock(this) 可能會有問題,因為不受控制的代碼也可能會鎖定該對象。這可能導致死鎖,即兩個或更多個線程等待釋放同一對象。出于同樣的原因,鎖定公共數(shù)據(jù)類型(相比于對象)也可能導致問題。鎖定字符串尤其危險,因為字符串被公共語言運行庫 (CLR)“暫留”。這意味著整個程序中任何給定字符串都只有一個實例,就是這同一個對象表示了所有運行的應用程序域的所有線程中的該文本。因此,只要在應用程序進程中的任何位置處具有相同內(nèi)容的字符串上放置了鎖,就將鎖定應用程序中該字符串的所有實例。因此,最好鎖定不會被暫留的私有或受保護成員。某些類提供專門用于鎖定的成員。例如,Array 類型提供 SyncRoot。許多集合類型也提供 SyncRoot

有關(guān) lock 關(guān)鍵字的更多信息,請參見:

lock 關(guān)鍵字類似,監(jiān)視器防止多個線程同時執(zhí)行代碼塊。Enter 方法允許一個且僅一個線程繼續(xù)執(zhí)行后面的語句;其他所有線程都將被阻止,直到執(zhí)行語句的線程調(diào)用 Exit。這與使用 lock 關(guān)鍵字一樣。事實上,lock 關(guān)鍵字就是用 Monitor 類來實現(xiàn)的。例如:

lock(x)
{
DoSomething();
}

這等效于:

System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
try
{
DoSomething();
}
finally
{
System.Threading.Monitor.Exit(obj);
}

使用 lock 關(guān)鍵字通常比直接使用 Monitor 類更可取,一方面是因為 lock 更簡潔,另一方面是因為 lock 確保了即使受保護的代碼引發(fā)異常,也可以釋放基礎監(jiān)視器。這是通過 finally 關(guān)鍵字來實現(xiàn)的,無論是否引發(fā)異常它都執(zhí)行關(guān)聯(lián)的代碼塊。

有關(guān)監(jiān)視器的更多信息,請參見監(jiān)視器同步技術(shù)示例

使用鎖或監(jiān)視器對于防止同時執(zhí)行區(qū)分線程的代碼塊很有用,但是這些構(gòu)造不允許一個線程向另一個線程傳達事件。這需要“同步事件”,它是有兩個狀態(tài)(終止和非終止)的對象,可以用來激活和掛起線程。讓線程等待非終止的同步事件可以將線程掛起,將事件狀態(tài)更改為終止可以將線程激活。如果線程試圖等待已經(jīng)終止的事件,則線程將繼續(xù)執(zhí)行,而不會延遲。

同步事件有兩種:AutoResetEventManualResetEvent。它們之間唯一的不同在于,無論何時,只要 AutoResetEvent 激活線程,它的狀態(tài)將自動從終止變?yōu)榉墙K止。相反,ManualResetEvent 允許它的終止狀態(tài)激活任意多個線程,只有當它的 Reset 方法被調(diào)用時才還原到非終止狀態(tài)。

可以通過調(diào)用一種等待方法,如 WaitOneWaitAnyWaitAll,讓線程等待事件。System.Threading.WaitHandle.WaitOne 使線程一直等待,直到單個事件變?yōu)榻K止狀態(tài);System.Threading.WaitHandle.WaitAny 阻止線程,直到一個或多個指示的事件變?yōu)榻K止狀態(tài);System.Threading.WaitHandle.WaitAll 阻止線程,直到所有指示的事件都變?yōu)榻K止狀態(tài)。當調(diào)用事件的 Set 方法時,事件將變?yōu)榻K止狀態(tài)。

在下面的示例中,創(chuàng)建了一個線程,并由 Main 函數(shù)啟動該線程。新線程使用 WaitOne 方法等待一個事件。在該事件被執(zhí)行 Main 函數(shù)的主線程終止之前,該線程一直處于掛起狀態(tài)。一旦該事件終止,輔助線程將返回。在本示例中,因為事件只用于一個線程的激活,所以使用 AutoResetEventManualResetEvent 類都可以。

using System;
using System.Threading;
class ThreadingExample
{
static AutoResetEvent autoEvent;
static void DoWork()
{
Console.WriteLine("   worker thread started, now waiting on event...");
autoEvent.WaitOne();
Console.WriteLine("   worker thread reactivated, now exiting...");
}
static void Main()
{
autoEvent = new AutoResetEvent(false);
Console.WriteLine("main thread starting worker thread...");
Thread t = new Thread(DoWork);
t.Start();
Console.WriteLine("main thrad sleeping for 1 second...");
Thread.Sleep(1000);
Console.WriteLine("main thread signaling worker thread...");
autoEvent.Set();
}
}

有關(guān)線程同步事件用法的更多示例,請參見:

mutex 與監(jiān)視器類似;它防止多個線程在某一時間同時執(zhí)行某個代碼塊。事實上,名稱“mutex”是術(shù)語“互相排斥 (mutually exclusive)”的簡寫形式。然而與監(jiān)視器不同的是,mutex 可以用來使跨進程的線程同步。mutex 由 Mutex 類表示。

當用于進程間同步時,mutex 稱為“命名 mutex”,因為它將用于另一個應用程序,因此它不能通過全局變量或靜態(tài)變量共享。必須給它指定一個名稱,才能使兩個應用程序訪問同一個 mutex 對象。

盡管 mutex 可以用于進程內(nèi)的線程同步,但是使用 Monitor 通常更為可取,因為監(jiān)視器是專門為 .NET Framework 而設計的,因而它可以更好地利用資源。相比之下,Mutex 類是 Win32 構(gòu)造的包裝。盡管 mutex 比監(jiān)視器更為強大,但是相對于 Monitor 類,它所需要的互操作轉(zhuǎn)換更消耗計算資源。有關(guān) mutex 的用法示例,請參見 Mutex

posted on 2010-01-14 16:58 醒目西西 閱讀(277) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费在线一区二区| 久久成人18免费网站| 欧美日本亚洲韩国国产| 久久精品噜噜噜成人av农村| 亚洲黄网站在线观看| 久久国产手机看片| 久久国产一区| 欧美在线亚洲| 欧美成人高清| 99精品久久免费看蜜臀剧情介绍| 日韩一级二级三级| 欧美亚洲网站| 欧美成人资源网| 国产精品久久久久永久免费观看| 国产精品久久7| 国产一区二区视频在线观看| 国产一区二区三区自拍| 亚洲黄色小视频| 亚洲欧美激情视频在线观看一区二区三区| 亚洲欧美视频| 亚洲成人在线视频网站| 99精品视频一区| 久久一区激情| 国产欧美日韩中文字幕在线| 好看不卡的中文字幕| 91久久国产精品91久久性色| 亚洲一区中文字幕在线观看| 免费91麻豆精品国产自产在线观看| 亚洲精品国产日韩| 久久精品中文| 国产精品网站一区| 亚洲精品婷婷| 牛人盗摄一区二区三区视频| 亚洲一区二区三区久久 | 欧美xxxx在线观看| 99视频精品全部免费在线| 欧美在线视频播放| 欧美日韩亚洲精品内裤| 韩日欧美一区二区三区| 欧美一区二区三区久久精品| 亚洲日本欧美日韩高观看| 亚洲欧美另类综合偷拍| 欧美日韩高清在线一区| 亚洲国产日韩欧美在线99| 久久精品一区二区三区不卡| 99视频精品免费观看| 欧美国产高清| 激情视频一区| 久久福利一区| 亚洲在线日韩| 国产精品日本欧美一区二区三区| 亚洲精品一级| 亚洲国产另类 国产精品国产免费| 欧美一区二区三区视频| 国产精品乱码| 欧美激情1区2区| 国产欧美日韩另类视频免费观看 | 国产精品久久波多野结衣| 亚洲国产精品毛片| 欧美成人xxx| 免费观看成人网| 91久久国产自产拍夜夜嗨| 欧美激情va永久在线播放| 久久精品综合| 亚洲精品免费一区二区三区| 一区二区三区蜜桃网| 99精品欧美一区二区蜜桃免费| 99国产精品国产精品毛片| 欧美大香线蕉线伊人久久国产精品| 香蕉国产精品偷在线观看不卡 | 亚洲免费综合| 国产区精品在线观看| 亚洲欧美在线网| 欧美一级理论性理论a| 国产亚洲欧美一区| 蜜臀av性久久久久蜜臀aⅴ| 久久综合五月| 一区二区欧美日韩| 亚洲一级在线| 国产综合自拍| 欧美黄色一级视频| 欧美视频在线观看 亚洲欧| 欧美一区二区三区免费在线看| 亚洲制服av| 加勒比av一区二区| 亚洲人成网站色ww在线| 欧美视频在线免费看| 欧美在线看片a免费观看| 久久福利视频导航| av成人手机在线| 欧美一级片久久久久久久| 亚洲韩国一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲免费高清视频| 国产精自产拍久久久久久| 久久精品国产成人| 99热这里只有成人精品国产| 欧美午夜一区二区三区免费大片| 午夜久久tv| 欧美aⅴ99久久黑人专区| 午夜精品久久久久久久白皮肤| 久久久久九九视频| 亚洲欧美文学| 欧美肥婆在线| 久久久精品动漫| 欧美日韩国产一区精品一区 | 久久久精彩视频| 麻豆久久久9性大片| 亚洲视频 欧洲视频| 久久精品一区二区三区中文字幕| 一区二区动漫| 欧美一区二区三区精品电影| 一本一本大道香蕉久在线精品| 午夜久久影院| 亚洲一区日韩| 欧美激情精品久久久久久免费印度| 欧美在线观看网址综合| 欧美日韩美女一区二区| 欧美国产精品久久| 黑人极品videos精品欧美裸| 亚洲小视频在线观看| 亚洲精品九九| 男女精品视频| 欧美高清在线播放| 影音先锋亚洲电影| 性色av香蕉一区二区| 夜夜嗨av一区二区三区四区 | 久久在线播放| 午夜一区不卡| 久久久久综合一区二区三区| 欧美伊久线香蕉线新在线| 欧美日韩欧美一区二区| 欧美高清hd18日本| 伊人精品视频| 久久久亚洲国产天美传媒修理工| 久久成人精品一区二区三区| 国产精品第一区| 亚洲天堂av综合网| 午夜精品视频网站| 欧美日韩国产天堂| 亚洲美女电影在线| 亚洲伊人第一页| 欧美午夜精品伦理| 一二三四社区欧美黄| 亚洲欧美日韩在线观看a三区| 国产精品theporn| 亚洲尤物精选| 久久精品五月婷婷| 在线成人免费视频| 欧美激情aⅴ一区二区三区| 亚洲欧洲另类国产综合| 亚洲裸体视频| 欧美日韩亚洲一区在线观看| 这里只有精品电影| 亚洲自拍偷拍网址| 国产三区精品| 久久影院午夜论| 亚洲人永久免费| 欧美一区91| 亚洲黄色大片| 国产精品久久久久久久久借妻| 亚洲欧美中文字幕| 欧美成人午夜免费视在线看片| 亚洲美女视频在线观看| 国产精品www.| 久久久精品一品道一区| 亚洲国产精品久久久久婷婷884 | 日韩亚洲欧美一区| 欧美午夜激情视频| 欧美在线黄色| 欧美日韩在线视频首页| 欧美亚洲综合在线| 狠狠色综合日日| 欧美国产91| 欧美一区二区三区视频在线 | 一区二区久久久久久| 国产女精品视频网站免费| 久久午夜av| 亚洲小说欧美另类婷婷| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲图片在线| 亚洲国产精品久久久久婷婷884| 国产精品久久久久999| 久久精品国产亚洲a| 在线亚洲免费| 亚洲国内精品在线| 久久人人爽人人爽爽久久| 一区二区三区|亚洲午夜| 国产日本欧美一区二区| 欧美激情第一页xxx| 欧美伊久线香蕉线新在线| 男人插女人欧美| 欧美一级片一区| 一区二区三区视频在线| **网站欧美大片在线观看| 国产日韩一级二级三级| 欧美视频中文字幕在线| 欧美精品一区二区三区四区| 久久乐国产精品| 久久黄色小说|