最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

例如在Collection(System.Collections.ObjectModel)中實現(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等類中實現(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(管程)類實現(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)鍵字相對于Monitor類在使用上更簡單,也更加保險。

相關(guān)文章

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

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

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

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

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

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

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

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

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

    C# WebClient類用法實例

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

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

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

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

    在C#中與數(shù)據(jù)庫進(jìn)行交互,通常使用ADO.NET(ActiveX Data Objects .NET)框架,ADO.NET是.NET Framework中用于數(shù)據(jù)訪問的一組類庫,它提供了多種用于連接和操作數(shù)據(jù)庫的方法,以下是使用C#與SQL Server數(shù)據(jù)庫進(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é)變和反變的背景知識、.NET 4.0引入的泛型協(xié)變、反變性、協(xié)變和反變的相互作用等內(nèi)容,需要的朋友可以參考下
    2015-06-06
  • Winform控件優(yōu)化之圓角按鈕2

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

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

    c# 引用類型和值類型

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

最新評論

广水市| 界首市| 昭苏县| 潜山县| 建湖县| 五大连池市| 平远县| 铜鼓县| 克拉玛依市| 尼勒克县| 曲麻莱县| 铜鼓县| 黄平县| 澜沧| 京山县| 昭苏县| 礼泉县| 时尚| 佳木斯市| 安远县| 上思县| 赤水市| 五华县| 东安县| 原平市| 博湖县| 吉木乃县| 仁怀市| 高州市| 紫金县| 林西县| 色达县| 柳江县| 微博| 巨野县| 金昌市| 西平县| 红原县| 嘉定区| 遂平县| 蕉岭县|