C#中volatile與lock用法
本文實(shí)例講述了C#中volatile與lock用法,分享給大家供大家參考。具體分析如下:
一、C#中volatile
volatile是C#中用于控制同步的關(guān)鍵字,其意義是針對(duì)程序中一些敏感數(shù)據(jù),不允許多線程同時(shí)訪問(wèn),保證數(shù)據(jù)在任何訪問(wèn)時(shí)刻,最多有一個(gè)線程訪問(wèn),以保證數(shù)據(jù)的完整性,volatile是修飾變量的修飾符。
1、volatile的使用場(chǎng)景
多個(gè)線程同時(shí)訪問(wèn)一個(gè)變量,CLR為了效率,允許每個(gè)線程進(jìn)行本地緩存,這就導(dǎo)致了變量的不一致性。volatile就是為了解決這個(gè)問(wèn)題,volatile修飾的變量,不允許線程進(jìn)行本地緩存,每個(gè)線程的讀寫都是直接操作在共享內(nèi)存上,這就保證了變量始終具有一致性。
2、volatile 關(guān)鍵字可應(yīng)用于以下類型的字段
① 引用類型
② 整型,如 sbyte、byte、short、ushort、int、uint、char、float 和 bool。
③ 具有整數(shù)基類型的枚舉類型。
④ 已知為引用類型的泛型類型參數(shù)。
⑤ 不能將局部變量聲明為 volatile。
二、C#中l(wèi)ock
1、lock 關(guān)鍵字將語(yǔ)句塊標(biāo)記為臨界區(qū),方法是獲取給定對(duì)象的互斥鎖,執(zhí)行語(yǔ)句,然后釋放該鎖。此語(yǔ)句的形式如下:
lock (thisLock)
{
// Critical code section
}
2、lock確保當(dāng)一個(gè)線程位于代碼的臨界區(qū)時(shí),另一個(gè)線程不進(jìn)入臨界區(qū)。如果其他線程試圖進(jìn)入鎖定的代碼,則它就會(huì)被阻止,直到該對(duì)象被釋放。也就是說(shuō)在用到臨界資源,確保線程可以排隊(duì)進(jìn)入執(zhí)行臨界區(qū)中的方法。
3、lock的使用場(chǎng)景
多個(gè)線程同時(shí)訪問(wèn)一個(gè)代碼塊,使用lock 修飾該代碼塊,強(qiáng)制多個(gè)線程進(jìn)行排隊(duì),一個(gè)接一個(gè)的去訪問(wèn)。
通常,應(yīng)避免鎖定 public 類型,否則實(shí)例將超出代碼的控制范圍。最佳做法是定義 private 對(duì)象來(lái)鎖定, 或 private static 對(duì)象變量來(lái)保護(hù)所有實(shí)例所共有的數(shù)據(jù)。
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
C#實(shí)現(xiàn)在窗體上的統(tǒng)計(jì)圖效果
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)在窗體上的統(tǒng)計(jì)圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
C#中面向?qū)ο缶幊虣C(jī)制之繼承學(xué)習(xí)筆記
這篇文章主要介紹了C#中面向?qū)ο缶幊虣C(jī)制之繼承學(xué)習(xí)筆記,本文給出一個(gè)簡(jiǎn)單子實(shí)例講解C#中的繼承,并講解了一些C#繼承的知識(shí)技巧,需要的朋友可以參考下2015-01-01
C#實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)繪圖graphic的方法示例
這篇文章主要介紹了C#實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)繪圖graphic的方法,結(jié)合實(shí)例形式分析了C#根據(jù)動(dòng)態(tài)數(shù)據(jù)繪制2D數(shù)據(jù)表格的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
基于C#代碼實(shí)現(xiàn)九宮格算法橫豎都等于4
這篇文章主要介紹了基于C#代碼實(shí)現(xiàn)九宮格算法橫豎都等于4的相關(guān)資料,需要的朋友可以參考下2016-01-01

