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

首頁 > 編程 > 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#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 于都县| 祁阳县| 柳林县| 洪泽县| 日喀则市| 西乌| 曲靖市| 集贤县| 昭觉县| 甘谷县| 利川市| 东至县| 招远市| 茶陵县| 泰兴市| 开远市| 宜宾县| 晋州市| 平顺县| 公安县| 富宁县| 灵武市| 衡东县| 松桃| 高邮市| 拉萨市| 黄山市| 柯坪县| 龙井市| 日喀则市| 察雅县| 韶山市| 沈阳市| 灵台县| 肥乡县| 康定县| 竹山县| 合肥市| 莱阳市| 清涧县| 屏山县|