最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用Interlocked實(shí)現(xiàn)線程同步

 更新時間:2018年10月26日 08:38:12   作者:Czhenya  
今天小編就為大家分享一篇關(guān)于C#使用Interlocked實(shí)現(xiàn)線程同步,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

通過System.Threading命名空間的Interlocked類控制計(jì)數(shù)器,從而實(shí)現(xiàn)進(jìn)程 的同步。Iterlocked類的部分方法如下表:

示例,同時開啟兩個線程,一個寫入數(shù)據(jù),一個讀出數(shù)據(jù)

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

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

運(yùn)行結(jié)果圖:(每次運(yùn)行結(jié)果都不一樣) 

修改代碼如下:

using System;
using System.Threading;
namespace 線程同步
{
  class Program
  {
    //緩沖區(qū),只能容納一個字符
    private static char buffer;
    //標(biāo)識量(緩沖區(qū)中已使用的空間,初始值為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++)
        {
          //寫入數(shù)據(jù)前檢查緩沖區(qū)是否已滿
          //如果已滿,就進(jìn)行等待,直到緩沖區(qū)中的數(shù)據(jù)被進(jìn)程Reader讀取為止
          while (Interlocked.Read(ref numberOfUsedSpace) == 1)
          {
            Thread.Sleep(50);
          }
          buffer = str[i];  //向緩沖區(qū)寫入數(shù)據(jù)
          //寫入數(shù)據(jù)后把緩沖區(qū)標(biāo)記為滿(由0變?yōu)?)
          Interlocked.Increment(ref numberOfUsedSpace);
        }
      });
      //線程:讀出者
      Thread Reader = new Thread(delegate ()
      {
        for (int i = 0; i < 24; i++)
        {
          //讀取數(shù)據(jù)前檢查緩沖區(qū)是否為空
          //如果為空,就進(jìn)行等待,直到進(jìn)程Writer向緩沖區(qū)中寫入數(shù)據(jù)為止
          while (Interlocked.Read(ref numberOfUsedSpace) == 0)
          {
            Thread.Sleep(50);
          }
          char ch = buffer;    //從緩沖區(qū)讀取數(shù)據(jù)
          Console.Write(ch);
          Interlocked.Decrement(ref numberOfUsedSpace);
        }
      });
      //啟動線程
      Writer.Start();
      Reader.Start();
      Console.ReadKey();
    }
  }
}

正確結(jié)果圖:

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • C#的this關(guān)鍵字的2種用法

    C#的this關(guān)鍵字的2種用法

    這篇文章主要給大家分享的是C#的this關(guān)鍵字的2種用法,在使用C#的過程中,發(fā)現(xiàn)this關(guān)鍵是比較少用的,但是在下面這二個場合下是必須要使用的,不使用它是解決不了問題。下面我們就來看看文章的具體內(nèi)容吧
    2021-10-10
  • C#?RichTextBox制作文本編輯器

    C#?RichTextBox制作文本編輯器

    這篇文章主要為大家詳細(xì)介紹了C#?RichTextBox制作文本編輯器的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • C#實(shí)現(xiàn)讀取和設(shè)置文件與文件夾的權(quán)限

    C#實(shí)現(xiàn)讀取和設(shè)置文件與文件夾的權(quán)限

    這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)讀取和設(shè)置文件與文件夾的權(quán)限,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Win10下C# DateTime出現(xiàn)星期幾問題的解決方法

    Win10下C# DateTime出現(xiàn)星期幾問題的解決方法

    這篇文章主要介紹了Win10下C# DateTime出現(xiàn)星期幾問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • C#實(shí)現(xiàn)Excel轉(zhuǎn)PDF時設(shè)置內(nèi)容適應(yīng)頁面寬度

    C#實(shí)現(xiàn)Excel轉(zhuǎn)PDF時設(shè)置內(nèi)容適應(yīng)頁面寬度

    將Excel轉(zhuǎn)為PDF格式時,通常情況下轉(zhuǎn)換出來的PDF頁面都是默認(rèn)的寬度大小。所以本文提供了C#實(shí)現(xiàn)Excel轉(zhuǎn)PDF時設(shè)置內(nèi)容適應(yīng)頁面寬度的示例代碼,需要的可以參考一下
    2022-04-04
  • 如何用C#創(chuàng)建用戶自定義異常淺析

    如何用C#創(chuàng)建用戶自定義異常淺析

    雖然在 C# 語言中已經(jīng)提供了很多異常處理類,但在實(shí)際編程中還是會遇到未涉及的一些異常處理,這篇文章主要給大家介紹了關(guān)于如何用C#創(chuàng)建用戶自定義異常的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • 深入理解C#表達(dá)式樹的使用

    深入理解C#表達(dá)式樹的使用

    表達(dá)式樹是C#編程語言中一個強(qiáng)大的特性,本文將深入探討表達(dá)式樹的基本概念、創(chuàng)建方法、節(jié)點(diǎn)類型、遍歷技巧以及在C#中的應(yīng)用示例,感興趣的可以了解一下
    2024-03-03
  • c# 用ffmpeg從視頻中截圖

    c# 用ffmpeg從視頻中截圖

    這篇文章主要介紹了c# 用ffmpeg從視頻中截圖的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#10的13個特性

    C#10的13個特性

    本文詳細(xì)講解了C#10的13個特性,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • C#版免費(fèi)離線人臉識別之虹軟ArcSoft?V3.0(推薦)

    C#版免費(fèi)離線人臉識別之虹軟ArcSoft?V3.0(推薦)

    本文只是簡單介紹了如何使用虹軟的離線SDK,進(jìn)行人臉識別的方法,并且是圖片的方式,本地離線識別最大的好處就是沒有延遲,識別結(jié)果立馬呈現(xiàn),對C#離線人臉識別虹軟相關(guān)知識感興趣的朋友一起看看吧
    2021-12-12

最新評論

连平县| 宜章县| 内江市| 嫩江县| 若羌县| 宜州市| 贵德县| 贺州市| 绥宁县| 淳安县| 乐清市| 崇礼县| 德钦县| 南澳县| 长子县| 白银市| 墨玉县| 恩施市| 南溪县| 大连市| 陆丰市| 灵石县| 广州市| 特克斯县| 惠水县| 抚州市| 徐水县| 班戈县| 珲春市| 台前县| 隆昌县| 思南县| 五家渠市| 阿荣旗| 常山县| 谷城县| 荔浦县| 南投县| 娱乐| 启东市| 石台县|