a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > 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的頻率也相當高,只有在壓力測試的時候才有可能發生,而且幾率非常非常小。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产欧美精品一区二区三区四区 | 久久国产一区 | 国产传媒自拍 | 亚洲精选国产 | 人人插人人爽 | 天天天天天天天天干 | 精品视频免费 | 久草新视频在线观看 | 久久午夜精品影院一区 | 成人欧美一区二区三区 | 国产三级电影 | 国产精品高清在线 | 日本aa大片在线播放免费看 | 大色欧美 | 欧美成人a∨高清免费观看 久久精品在线 | 激情网在线观看 | 国产成人午夜高潮毛片 | 久久免费高清视频 | 大胸av | 欧美黄视频 | 欧美日韩1区 | 国产精品1区2区3区 国产2区 | 午夜视频免费 | 91精品国产99久久久久久红楼 | 日本特黄a级高清免费大片 综合一区二区三区 | 成人激情开心网 | 日韩视频中文字幕 | 影视一区二区 | 草草视频网站 | 欧美激情精品久久久久久 | 亚洲一区不卡 | 日本www在线观看 | 国产在线看片 | 91免费版在线观看 | 欧美激情综合五月色丁香小说 | 日韩欧美一区二区三区久久婷婷 | 国产精品久久久久久av公交车 | 娇妻被3p高潮爽视频 | 欧美激情一区二区三级高清视频 | 国产在线不卡观看 | 女同理伦片在线观看禁男之园 |