国产探花免费观看_亚洲丰满少妇自慰呻吟_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的頻率也相當高,只有在壓力測試的時候才有可能發生,而且幾率非常非常小。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 裕民县| 广汉市| 广水市| 青川县| 江津市| 元氏县| 航空| 屯留县| 五家渠市| 涞水县| 偃师市| 垦利县| 江津市| 寿宁县| 常宁市| 克拉玛依市| 莆田市| 北碚区| 丰镇市| 澄城县| 宜黄县| 扎兰屯市| 西城区| 商城县| 西乌珠穆沁旗| 阿拉善右旗| 勐海县| 四平市| 柯坪县| 定州市| 华蓥市| 新宁县| 大厂| 香河县| 习水县| 同江市| 珲春市| 卫辉市| 安国市| 永安市| 石门县|