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

首頁 > 編程 > 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#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产亚洲一区二区三区在线观看 | 日韩区| 国产一级做a爰片在线看免费 | 久久一级| www.日韩av.com | 91在线网址 | 国产精品一区二区三 | 天堂亚洲 | 成人午夜视频在线观看 | 精品国产一区二区三区久久久蜜月 | 亚洲成人首页 | 国产欧美在线视频 | 九九亚洲精品 | 国产精品久久国产精品 | 91精品国产综合久久婷婷香蕉 | 在线色综合 | 久久夜夜 | 精品国产乱码久久久久久闺蜜 | 日韩一区免费 | 最新伦理片 | 国产一区二区影院 | 九色在线观看视频 | 这里只有精品在线 | 久久机热| 黑人性dh | 国产精品视频免费看 | 福利视频一区 | 亚洲欧美日韩国产综合 | 在线精品亚洲 | 色综合一区二区三区 | 精品一区二区三区在线观看 | 国产精品一区二区免费在线观看 | 欧美激情在线精品一区二区三区 | 欧美99 | 国产精品a久久久久 | 国产欧美一区二区精品性色 | 综合久久综合久久 | 国产福利91精品一区二区三区 | 999在线观看精品免费不卡网站 | 中文字幕第六页 | 欧美高清视频在线观看 |