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

首頁 > 編程 > .NET > 正文

.net面向對象之多線程(Multithreading)及 多線程高級應用

2024-07-10 13:29:15
字體:
來源:轉載
供稿:網友
這篇文章主要介紹.net面向對象程序設計階段多線程Multithreading及多線程高級應用的介紹,需要的朋友可以參考下
 

在.net面向對象程序設計階段在線程資源共享中的線程安全和線程沖突的解決方案;多線程同步,使用線程鎖和線程通知實現線程同步,具體內容介紹如下:

1、 ThreadStatic特性

特性:[ThreadStatic]

功能:指定靜態字段在不同線程中擁有不同的值

在此之前,我們先看一個多線程的示例:

我們定義一個靜態字段:

 static int num = 0;
 然后創建兩個線程進行分別累加:
 

  1. new Thread(() => 
  2.   for (int i = 0; i < 1000000; i++) 
  3.     ++num; 
  4.   Console.WriteLine("來自{0}:{1}", Thread.CurrentThread.Name, num); 
  5. }) 
  6. { Name = "線程一" }.Start();  
  7.  
  8. new Thread(() => 
  9.   for (int i = 0; i < 2000000; i++) 
  10.     ++num; 
  11.   Console.WriteLine("來自{0}:{1}", Thread.CurrentThread.Name, num); 
  12. }) 
  13. { Name = "線程二" }.Start(); 

 

 

運行多次結果如下:

    

可以看到,三次的運行結果均不相同,產生這種問題的原因是多線程中同步共享問題導致的,即是多個線程同時共享了一個資源。如何解決上述問題,最簡單的方法就是使用靜態字段的ThreadStatic特性。

在定義靜態字段時,加上[ThreadStatic]特性,如下:

 

復制代碼代碼如下:

 [ThreadStatic]
static int num = 0;
兩個線程不變的情況下,再次運行,結果如下:

 

 

不論運行多少次,結果都是一樣的,當字段被ThreadStatic特性修飾后,它的值在每個線程中都是不同的,即每個線程對static字段都會重新分配內存空間,就當然于一次new操作,這樣一來,由于static字段所產生的問題也就沒有了。

2. 資源共享

多線程的資源共享,也就是多線程同步(即資源同步),需要注意的是線程同步指的是線程所訪問的資源同步,并非是線程本身的同步。

在實際使用多線程的過程中,并非都是各個線程訪問不同的資源。

下面看一個線程示例,假如我們并不知道線程要多久完成,我們等待一個固定的時間(假如是500毫秒):

先定義一個靜態字段:

 static int result;
創建線程:
 

  1. Thread myThread = new Thread(() => 
  2.   Thread.Sleep(1000); 
  3.   result = 100; 
  4. }); 
  5. myThread.Start(); 
  6. Thread.Sleep(500);        
  7. Console.WriteLine(result); 
?
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石渠县| 闻喜县| 克拉玛依市| 襄樊市| 南陵县| 曲水县| 揭西县| 翁牛特旗| 兴文县| 岚皋县| 兰坪| 祥云县| 资兴市| 苏尼特右旗| 湘阴县| 定兴县| 会泽县| 新昌县| 定安县| 金平| 喀什市| 满洲里市| 合肥市| 吉首市| 宾阳县| 中山市| 昌邑市| 龙南县| 福州市| 乌海市| 伊宁县| 桐梓县| 鄂州市| 岚皋县| 罗源县| 什邡市| 旬邑县| 日喀则市| 额济纳旗| 康平县| 竹北市|