日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#使用Interlocked实现线程同步

發布時間:2025/3/8 C# 30 如意码农
生活随笔 收集整理的這篇文章主要介紹了 C#使用Interlocked实现线程同步 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

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

 1 static void Main(string[] args)
2 {
3 //緩沖區,只能容納一個字符
4 char buffer = ',';
5 string str = ""這里面的字會一個一個讀取出來,一個都不會少,,,"";
6 //線程:寫入數據
7 Thread writer = new Thread(() =>
8 {
9 for (int i = 0; i < str.Length; i++)
10 {
11 buffer = str[i];
12 Thread.Sleep(20);
13 }
14 }
15 );
16 //線程:讀出數據
17 Thread Reader = new Thread(() =>
18 {
19 for (int i = 0; i < str.Length; i++)
20 {
21 char chartemp = buffer;
22 Console.Write(chartemp);
23 Thread.Sleep(30);
24 }
25 }
26 );
27 writer.Start();
28 Reader.Start();
29 Console.ReadKey();
30 }

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

修改代碼如下:

 1 class Program
2 {
3 //緩沖區,只能容納一個字符
4 private static char buffer;
5 //標識量(緩沖區中已使用的空間,初始值為0)
6 private static long numberOfUsedSpace = 0;
7 static void Main(string[] args)
8 {
9 //線程:寫入者
10 Thread Writer = new Thread(delegate ()
11 {
12 string str = "這里面的字會一個一個讀取出來,一個都不會少,,,";
13 for (int i = 0; i < 24; i++)
14 {
15 //寫入數據前檢查緩沖區是否已滿
16 //如果已滿,就進行等待,直到緩沖區中的數據被進程Reader讀取為止
17 while (Interlocked.Read(ref numberOfUsedSpace) == 1)
18 {
19 Thread.Sleep(50);
20 }
21 buffer = str[i]; //向緩沖區寫入數據
22 //寫入數據后把緩沖區標記為滿(由0變為1)
23 Interlocked.Increment(ref numberOfUsedSpace);
24 }
25 });
26 //線程:讀出者
27 Thread Reader = new Thread(delegate ()
28 {
29 for (int i = 0; i < 24; i++)
30 {
31 //讀取數據前檢查緩沖區是否為空
32 //如果為空,就進行等待,直到進程Writer向緩沖區中寫入數據為止
33 while (Interlocked.Read(ref numberOfUsedSpace) == 0)
34 {
35 Thread.Sleep(50);
36 }
37 char ch = buffer; //從緩沖區讀取數據
38 Console.Write(ch);
39 Interlocked.Decrement(ref numberOfUsedSpace);
40 }
41 });
42 //啟動線程
43 Writer.Start();
44 Reader.Start();
45 Console.ReadKey();
46 }

正確結果圖:

原文地址:https://www.jb51.net/article/149543.htm

總結

以上是生活随笔為你收集整理的C#使用Interlocked实现线程同步的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。