C#中volatile與lock用法
本文實例講述了C#中volatile與lock用法,分享給大家供大家參考。具體分析如下:
一、C#中volatile
volatile是C#中用于控制同步的關鍵字,其意義是針對程序中一些敏感數(shù)據(jù),不允許多線程同時訪問,保證數(shù)據(jù)在任何訪問時刻,最多有一個線程訪問,以保證數(shù)據(jù)的完整性,volatile是修飾變量的修飾符。
1、volatile的使用場景
多個線程同時訪問一個變量,CLR為了效率,允許每個線程進行本地緩存,這就導致了變量的不一致性。volatile就是為了解決這個問題,volatile修飾的變量,不允許線程進行本地緩存,每個線程的讀寫都是直接操作在共享內(nèi)存上,這就保證了變量始終具有一致性。
2、volatile 關鍵字可應用于以下類型的字段
① 引用類型
② 整型,如 sbyte、byte、short、ushort、int、uint、char、float 和 bool。
③ 具有整數(shù)基類型的枚舉類型。
④ 已知為引用類型的泛型類型參數(shù)。
⑤ 不能將局部變量聲明為 volatile。
二、C#中l(wèi)ock
1、lock 關鍵字將語句塊標記為臨界區(qū),方法是獲取給定對象的互斥鎖,執(zhí)行語句,然后釋放該鎖。此語句的形式如下:
lock (thisLock)
{
// Critical code section
}
2、lock確保當一個線程位于代碼的臨界區(qū)時,另一個線程不進入臨界區(qū)。如果其他線程試圖進入鎖定的代碼,則它就會被阻止,直到該對象被釋放。也就是說在用到臨界資源,確保線程可以排隊進入執(zhí)行臨界區(qū)中的方法。
3、lock的使用場景
多個線程同時訪問一個代碼塊,使用lock 修飾該代碼塊,強制多個線程進行排隊,一個接一個的去訪問。
通常,應避免鎖定 public 類型,否則實例將超出代碼的控制范圍。最佳做法是定義 private 對象來鎖定, 或 private static 對象變量來保護所有實例所共有的數(shù)據(jù)。
希望本文所述對大家的C#程序設計有所幫助。
相關文章
C#使用HttpPost請求調(diào)用WebService的方法
這篇文章主要為大家詳細介紹了C#使用HttpPost請求調(diào)用WebService的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08webBrowser執(zhí)行js的方法,并返回值,c#后臺取值的實現(xiàn)
下面小編就為大家?guī)硪黄獁ebBrowser執(zhí)行js的方法,并返回值,c#后臺取值的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12