成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#特有線程功能

開發 后端
這里介紹C#特有線程功能,C#中確實有一些Java不支持的方法、類和函數,對于鐵桿的Java線程編程人員而言,這可是一件好事,因為他們可以用C#編寫代碼,然后在Java代碼中引用。

C#特有線程功能

C#特有線程功能,我們一直對C#抱有很高的期望,C#中確實有一些Java不支持的方法、類和函數,對于鐵桿的Java線程編程人員而言,這可是一件好事,因為他們可以用C#編寫代碼,然后在Java代碼中引用。

要在Java中獲得某一變量的鎖,必須在代碼的首尾二端加上synchronized關健字,指明需要獲得鎖的對象。一旦線程開始執行 synchronized塊中的代碼,它就獲得了對這一對象的鎖的控制權。同樣,一旦線程已經離開了synchronized塊,它也將釋放這一對象的鎖。我們已經知道,C#也有一個相似的被稱作lock的關健字。除了lock這個關健字外,C#還提供了內置的獲得和釋放鎖的方法:Monitor.Enter(object obj)和Monitor.Exit(object obj),通過使用這些方法,編程人員可以獲得與使用lock相同的作用,但提供了更精確的控制方法。例如,可以在一個方法中鎖定幾個變量,而不同時或在代碼中的不同部分釋放它們。

對一個需要進行同步的對象執行System.Threading.Monitor.Enter操作將使線程獲得該對象的鎖,或者在由其他線程控制著該對象的鎖時進行阻塞。通過執行Monitor.Exit方法就可以釋放鎖,如果線程已經不控制著該對象的鎖了,這一方法將會產生一個 System.Threading.SynchronizationLockException異常信號。

C#中的Monitor類不但包括Enter方法,還包括TryEnter方法,如果執行該方法,就會或者獲得一個鎖,或者返回一個表明它不能獲得鎖的返回值。

原子操作

System.Threading.Interlocked類提供了程序對由幾個線程共享的變量進行同步訪問的能力,C#把一些操作抽象為“原子”操作或“不可分割”的操作。為了說明這一問題是如何解決的,我們來看一下下面的Java代碼:

  1. public static int x = 1;  
  2. public static void increment() {  
  3. xx = x 1;  
  4. }  

如果有二個不同的線程同時調用increment(),x***的值可能是2或3,發生這種情況的原因可能是二個進程無序地訪問x變量,在沒有將x置初值時對它執行加1操作;在任一線程有機會對x執行加1操作之前,二個線程都可能將x讀作1,并將它設置為新的值。

在Java和C#中,我們都可以實現對x變量的同步訪問,所有進程都可以按各自的方式運行。但通過使用Interlocked類,C#提供了一個對這一問題更徹底的解決方案。Interlocked類有一些方法,例如Increment(ref int location)、Decrement(ref int location),這二個方法都取得整數型參數,對該整數執行加或減1操作,并返回新的值,所有這些操作都以“不可分割的”方式進行,這樣就無需單***建一個可以進行同步操作的對象,如下例所示:

  1. public static Object locker = ...  
  2. public static int x = 1;  
  3. public static void increment() {  
  4. synchronized( locker ) {  
  5. xx = x 1;  
  6. }  
  7. }  

C#中的Interlocked類可以用下面的代碼完成相同的操作:

  1. public static int x = 1;  
  2.  
  3. public static void Increment() {  
  4. Interlocked.Increment( ref x );  
  5.  
  6. }  

Interlocked中還包括一個名字為Exchange的方法,可以“不可分割”地將一個變量的值設置為另一個變量的值。

線程池

如果許多利用了線程的應用軟件都創建線程,這些線程將會因等待某些條件(鍵盤或新的I/O輸入等)而在等待狀態中浪費大部分的時間,C#提供的 System.Threading.ThreadPool對象可以解決這一問題。使用ThreadPool和事件驅動的編程機制,程序可以注冊一個 System.Threading.WaitHandle對象(WaitHandle是C#編程中等待和通知機制的對象模型)和 System.Threading.WaitOrTimerCallback對象,所有的線程無需自己等待WaitHandle的釋放,ThreadPool將監控所有向它注冊的WaitHandle,然后在WaitHandle被釋放后調用相應 WaitOrTimerCallback對象的方法。 以上介紹C#特有線程功能。

【編輯推薦】

  1. 描述C# Anonymous Type
  2. C#調用CreateObject
  3. 淺談C#對象和集合
  4. C#分部方法的應用場景
  5. 淺析C# Anonymous Type
責任編輯:佚名 來源: Sina
相關推薦

2009-08-18 09:26:07

C#線程功能

2009-08-25 15:09:30

C#線程的啟動

2009-08-27 18:05:54

C#索引功能

2009-09-07 15:40:06

2009-09-02 17:29:10

C# TextBox換

2009-09-04 14:41:09

C#同步線程

2009-08-12 18:04:44

編寫C#多線程

2009-08-12 13:11:24

C#實現遠程線程插入

2009-08-04 17:57:41

C#線程同步死鎖

2009-08-28 16:51:32

C#線程控制

2009-09-07 13:02:52

Java和C#線程

2009-08-26 10:43:14

C#實現打印功能

2009-08-26 09:22:44

C#實現打印功能

2009-08-28 16:43:57

C#多線程學習

2009-09-04 15:09:48

C#多線程啟動Squa

2009-08-04 18:00:51

C#線程同步Monitor

2009-08-28 17:10:59

C#線程優先級

2009-08-28 15:57:56

C#線程傳遞參數

2009-08-04 16:58:21

C#線程BeginInvokeEndInvoke

2009-08-07 13:03:10

C#控件數組
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲 欧美 另类 综合 偷拍 | 久久久精品亚洲 | 日韩视频一区二区三区 | 亚洲精品一区二区三区蜜桃久 | www.色综合| 国产日韩欧美二区 | 欧美精品一区二区在线观看 | 成人国产精品久久久 | 视频一区在线观看 | 久久久成人精品 | 欧美国产日韩精品 | 国内久久 | 激情五月综合 | 久久久久网站 | 欧美在线免费 | www.国产.com| 亚洲午夜精品 | 欧美久久一级特黄毛片 | 国产精品国产精品国产专区不卡 | 国产伦精品一区二区 | 国产精品精品3d动漫 | 日韩美女在线看免费观看 | 欧美午夜剧场 | 久夜精品 | 日韩图区 | 99久久久国产精品免费消防器 | 精品国产一区二区三区免费 | a级在线免费视频 | 亚洲成人三区 | 天天操综合网 | 日韩欧美黄色 | 亚洲成人日韩 | 亚洲顶级毛片 | 欧美1区| 国产特级毛片aaaaaa喷潮 | 成人国产免费观看 | 青青草社区| 国精产品一区一区三区免费完 | 国产精品毛片 | 在线国产一区 | 亚洲高清视频在线观看 |