麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C# > 正文

C#使用Interlocked實現線程同步

2019-10-29 19:58:07
字體:
來源:轉載
供稿:網友

通過System.Threading命名空間的Interlocked類控制計數器,從而實現進程 的同步。Iterlocked類的部分方法如下表:

C#,Interlocked,線程同步

示例,同時開啟兩個線程,一個寫入數據,一個讀出數據

代碼如下:(但是運行結果卻不是我們想象的那樣)

using System;using System.Threading;namespace 線程同步{  class Program  {    static void Main(string[] args)    {      //緩沖區,只能容納一個字符      char buffer = ',';      string str = ""這里面的字會一個一個讀取出來,一個都不會少,,,"";      //線程:寫入數據      Thread writer = new Thread(() =>      {        for (int i = 0; i < str.Length; i++)        {          buffer = str[i];          Thread.Sleep(20);        }      }             );      //線程:讀出數據      Thread Reader = new Thread(() =>      {        for (int i = 0; i < str.Length; i++)        {          char chartemp = buffer;          Console.Write(chartemp);          Thread.Sleep(30);        }      }      );      writer.Start();      Reader.Start();      Console.ReadKey();    }  }}

運行結果圖:(每次運行結果都不一樣) 

C#,Interlocked,線程同步

修改代碼如下:

using System;using System.Threading;namespace 線程同步{  class Program  {    //緩沖區,只能容納一個字符    private static char buffer;    //標識量(緩沖區中已使用的空間,初始值為0)    private static long numberOfUsedSpace = 0;    static void Main(string[] args)    {      //線程:寫入者      Thread Writer = new Thread(delegate ()      {        string str = "這里面的字會一個一個讀取出來,一個都不會少,,,";        for (int i = 0; i < 24; i++)        {          //寫入數據前檢查緩沖區是否已滿          //如果已滿,就進行等待,直到緩沖區中的數據被進程Reader讀取為止          while (Interlocked.Read(ref numberOfUsedSpace) == 1)          {            Thread.Sleep(50);          }          buffer = str[i];  //向緩沖區寫入數據          //寫入數據后把緩沖區標記為滿(由0變為1)          Interlocked.Increment(ref numberOfUsedSpace);        }      });      //線程:讀出者      Thread Reader = new Thread(delegate ()      {        for (int i = 0; i < 24; i++)        {          //讀取數據前檢查緩沖區是否為空          //如果為空,就進行等待,直到進程Writer向緩沖區中寫入數據為止          while (Interlocked.Read(ref numberOfUsedSpace) == 0)          {            Thread.Sleep(50);          }          char ch = buffer;    //從緩沖區讀取數據          Console.Write(ch);          Interlocked.Decrement(ref numberOfUsedSpace);        }      });      //啟動線程      Writer.Start();      Reader.Start();      Console.ReadKey();    }  }}

正確結果圖:

C#,Interlocked,線程同步

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品久久久久影院老司 | 男男啪羞羞视频网站 | 91精品国产综合久久久欧美 | 亚洲视频在线免费看 | 8x成人在线电影 | 天天鲁在线视频免费观看 | 欧美18videos性处按摩 | 毛片电影在线看 | 精品国产一区二区三区天美传媒 | 久章草影院 | 欧美日韩在线播放一区 | 免费a级观看 | 欧美黄色一级生活片 | 天天草天天爱 | 黄色影院网站 | 操毛片 | 青青国产在线视频 | 国产精品视频专区 | 久久区二区| 逼片 | 视频www| 91av在线免费播放 | 一级美女大片 | chinese中国真实乱对白 | 免费毛片在线视频 | 久久精品久久精品久久精品 | 黄色毛片前黄 | 亚洲小视频在线播放 | 国产成人观看 | 黄色羞羞视频在线观看 | 一级大片一级一大片 | 福利在线国产 | 羞羞网站在线看 | 精品国产一区二区三区久久久 | 色婷婷a v | 一本视频在线观看 | 亚洲成人国产综合 | 国产精品9191 | 亚洲一区二区在线免费 | 国产成人羞羞视频在线 | 欧美雌雄另类xxxxx |