欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中實(shí)現(xiàn)線程同步lock關(guān)鍵字的用法詳解

 更新時(shí)間:2016年07月05日 14:37:38   作者:ruozeng  
實(shí)現(xiàn)線程同步的第一種方式是我們經(jīng)常使用的lock關(guān)鍵字,它將包圍的語(yǔ)句塊標(biāo)記為臨界區(qū),這樣一次只有一個(gè)線程進(jìn)入臨界區(qū)并執(zhí)行代碼,接下來(lái)通過(guò)本文給大家介紹C#中實(shí)現(xiàn)線程同步lock關(guān)鍵字的用法詳解,一起看看吧

1. lock關(guān)鍵字保證一個(gè)代碼塊在執(zhí)行的過(guò)程中不會(huì)受到其他線程的干擾,這是通過(guò)在該代碼塊的運(yùn)行過(guò)程中對(duì)特定的對(duì)象加互斥鎖來(lái)實(shí)現(xiàn)的。

2. lock關(guān)鍵字的參數(shù)必須是引用類型的對(duì)象。lock對(duì)基本數(shù)據(jù)類型如int,long等無(wú)效,因?yàn)樗饔玫念愋捅仨毷菍?duì)象。如果傳入long類型數(shù)據(jù),勢(shì)必被轉(zhuǎn)換為Int64結(jié)構(gòu)類型,則加鎖的是全新的對(duì)象引用。如果需要對(duì)它們進(jìn)行互斥訪問(wèn)限制,可以使用System.Threading.Interlocked類提供的方法,這個(gè)類是提供原子操作的。

3. lock(this)的使用要慎重。共有類型中使用lock(this),如果新的對(duì)象被創(chuàng)建并加鎖,極易造成死鎖。

4. 鎖定ICollection類型對(duì)象時(shí),應(yīng)lock其SyncRoot屬性。

SyncRoot屬性在接口ICollection中聲明,其實(shí)現(xiàn)方式各不相同。

例如在Collection(System.Collections.ObjectModel)中實(shí)現(xiàn)如下:

object ICollection.SyncRoot 
{ 
     get 
     { 
          if (this._syncRoot == null) 
          { 
               ICollection items = this.items as ICollection; 
               if (items != null) 
               { 
                    this._syncRoot = items.SyncRoot; 
               } 
               else 
               { 
                    Interlocked.CompareExchange(ref this._syncRoot, new object(), null); 
               } 
          } 
          return this._syncRoot; 
     } 
} 

而在List<T>,ArrayList等類中實(shí)現(xiàn)如下:

object ICollection.SyncRoot 
{ 
     get 
     { 
          if (this._syncRoot == null) 
          { 
               Interlocked.CompareExchange(ref this._syncRoot, new object(), null); 
          } 
          return this._syncRoot; 
     } 
} 
  

在Array類中則直接返回了this:

public object SyncRoot 
{ 
     get 
     { 
          return this; 
     } 
} 

5. lock關(guān)鍵字是用Monitor(管程)類實(shí)現(xiàn)的

lock(x) 
{ 
  DoSomething(); 
} 

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

以上兩段代碼是等效的。(MSDN)

使用lock關(guān)鍵字相對(duì)于Monitor類在使用上更簡(jiǎn)單,也更加保險(xiǎn)。

相關(guān)文章

  • WPF實(shí)現(xiàn)樹(shù)形表格控件的示例代碼

    WPF實(shí)現(xiàn)樹(shù)形表格控件的示例代碼

    這篇文章主要介紹了如何利用WPF框架實(shí)現(xiàn)樹(shù)形表格控件,該控件不僅能夠有效地展示復(fù)雜的層級(jí)數(shù)據(jù),還能夠提供豐富的個(gè)性化定制選項(xiàng),感興趣的可以了解下
    2024-04-04
  • Visual Studio中根據(jù)系統(tǒng)區(qū)分引用64位、32位DLL動(dòng)態(tài)庫(kù)文件的配置方法

    Visual Studio中根據(jù)系統(tǒng)區(qū)分引用64位、32位DLL動(dòng)態(tài)庫(kù)文件的配置方法

    這篇文章主要介紹了Visual Studio中根據(jù)系統(tǒng)區(qū)分引用64位、32位DLL動(dòng)態(tài)庫(kù)文件的配置方法,本文在VS2008中測(cè)試通過(guò),其它VS版本可以參考下
    2014-09-09
  • C#實(shí)現(xiàn)DataList里面嵌套DataList的折疊菜單

    C#實(shí)現(xiàn)DataList里面嵌套DataList的折疊菜單

    這篇文章主要介紹了C#實(shí)現(xiàn)DataList里面嵌套DataList的折疊菜單,以實(shí)例形式詳細(xì)分析了DataList嵌套實(shí)現(xiàn)折疊菜單所涉及的JavaScript、HTML與C#相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • c#單例模式(Singleton)的6種實(shí)現(xiàn)

    c#單例模式(Singleton)的6種實(shí)現(xiàn)

    這篇文章主要介紹了c#單例模式(Singleton)的6種實(shí)現(xiàn) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • C# WebClient類用法實(shí)例

    C# WebClient類用法實(shí)例

    這篇文章主要介紹了C# WebClient類用法實(shí)例,本文講解使用WebClient下載文件、OpenWriter打開(kāi)一個(gè)流使用指定的方法將數(shù)據(jù)寫(xiě)入到uri以及上傳文件示例,需要的朋友可以參考下
    2015-07-07
  • C#實(shí)現(xiàn)圖像選擇驗(yàn)證碼的示例代碼

    C#實(shí)現(xiàn)圖像選擇驗(yàn)證碼的示例代碼

    為了防止網(wǎng)站被非法登陸,網(wǎng)站一般通過(guò)驗(yàn)證碼的方式,防止黑客用軟件非法登陸,本文主要介紹了C#實(shí)現(xiàn)圖像選擇驗(yàn)證碼的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • 使用C#與SQL Server數(shù)據(jù)庫(kù)進(jìn)行交互的詳細(xì)步驟

    使用C#與SQL Server數(shù)據(jù)庫(kù)進(jìn)行交互的詳細(xì)步驟

    在C#中與數(shù)據(jù)庫(kù)進(jìn)行交互,通常使用ADO.NET(ActiveX Data Objects .NET)框架,ADO.NET是.NET Framework中用于數(shù)據(jù)訪問(wèn)的一組類庫(kù),它提供了多種用于連接和操作數(shù)據(jù)庫(kù)的方法,以下是使用C#與SQL Server數(shù)據(jù)庫(kù)進(jìn)行交互的詳細(xì)步驟,需要的朋友可以參考下
    2024-08-08
  • 詳解.NET 4.0中的泛型協(xié)變(covariant)和反變(contravariant)

    詳解.NET 4.0中的泛型協(xié)變(covariant)和反變(contravariant)

    這篇文章主要介紹了詳解.NET 4.0中的泛型協(xié)變(covariant)和反變(contravariant),本文講解了協(xié)變和反變的背景知識(shí)、.NET 4.0引入的泛型協(xié)變、反變性、協(xié)變和反變的相互作用等內(nèi)容,需要的朋友可以參考下
    2015-06-06
  • Winform控件優(yōu)化之圓角按鈕2

    Winform控件優(yōu)化之圓角按鈕2

    這篇文章主要介紹了Winform控件優(yōu)化之圓角按鈕2,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-08-08
  • c# 引用類型和值類型

    c# 引用類型和值類型

    CLR支持兩種類型:引用類型和值類型。引用類型總是從托管堆上分配的
    2012-10-10

最新評(píng)論