国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#中使用volatile進行線程同步

2023-05-17 11:41:55
字體:
來源:轉載
供稿:網友

volatile是最簡單的一種同步方法。volatile 關鍵字表示字段可能被多個并發執行線程修改。聲明為 volatile 的字段不受編譯器優化(假定由單個線程訪問)的限制。這樣可以確保該字段在任何時間呈現的都是最新的值。當然簡單是要付出代價的。它只能在變量一級做同步,volatile的含義就是告訴處理器,不要將我放入工作內存,請直接在主存操作我。因此,當多線程同時訪問該變量時,都將直接操作主存,從本質上做到了變量共享。

volatile 關鍵字可應用于以下類型的字段:

(1)引用類型Any  reference type

(2)指針類型(不安全的上下文中)Any pointer type (in an unsafe context)

(3)整型,如sbyte, byte, short, ushort, int, uint, char, float, bool.

(4)具有整數基類型的枚舉類型。 An enum type with an enum base type of byte, sbyte, short, ushort, int, or uint.

(5)已知為引用類型的泛型類型參數:IntPtr 和 UIntPtr。

可變關鍵字僅可應用于類或結構字段。不能將局部變量聲明為 volatile。

下面介紹一個具體的例子來說明一下:

   public class A
  {
     private volatile int _i;
     public int I
     {
       get { return _i; }
       set { _i = value; }
     }
  }

但volatile并不能實現真正的同步,因為它的操作級別只停留在變量級別,而不是原子級別。如果是在單處理器系統中,是沒有任何問題的,變量在主存中沒有機會被其他人修改,因為只有一個處理器,這就叫作processor Self-Consistency。但在多處理器系統中,可能就會有問題。每個處理器都有自己的data cach,而且被更新的數據也不一定會立即寫回到主存。所以可能會造成不同步,但這種情況很難發生,因為cach的讀寫速度相當快,flush的頻率也相當高,只有在壓力測試的時候才有可能發生,而且幾率非常非常小。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌拉特中旗| 织金县| 德保县| 屏山县| 聂拉木县| 临汾市| 裕民县| 新营市| 巴彦淖尔市| 上犹县| 祁门县| 宾川县| 峨山| 日照市| 汉阴县| 若羌县| 泗阳县| 南宫市| 静安区| 涟源市| 衡山县| 汉川市| 四子王旗| 大邑县| 浑源县| 甘肃省| 顺义区| 洪湖市| 周宁县| 大厂| 康定县| 鞍山市| 叙永县| 郓城县| 海宁市| 同仁县| 赣州市| 安达市| 台东县| 盈江县| 富蕴县|