C# 線程手冊 第二章 .NET 中的線程


概述

在第一章我們描述了什么是線程。我們講述了很多人可能已經很熟悉的背景知識。知道了線程的哪部分最重要。在這一章,你將看到如何實現一些基本的線程;然而了解何時使用線程相對知道基本實現來說更重要一些。

在這章的最后,你將了解:

1. System.Threading 命名空間。

2. 使用線程時有什么設計問題?

3. 線程使用什么資源?

4. 使用線程時要避免什么錯誤?

 

System.Threading 命名空間

我們已經說過托管代碼中的線程由一個System.Threading線程類實例。在這部分,我們將進一步討論System.Threading命名空間和它的內容。

System.Threading命名空間的類在下表中列出。

描述

AutoResetEvent

這個事件通知一個或者多個正在等待的線程事件已經發生。

Interlocked

這個類通過為由多個線程共享的變量提供原子操作來避免發生錯誤。

ManualResetEvent

當通知一個或者多個等待的線程已經發生一個事件時發生。

Monitor

這個類提供一個同步訪問對象的架構。

Mutex

為一個線程提供共享資源獨占訪問的一個同步原型。也可用於內部進程同步。

ReaderWriterLock

定義一個允許單寫-多讀語法。

RegisteredWaitHandle

這個類表示一個當調用RegisterWaitForSingleObject()方法注冊的句柄。

SynchronizationLockException

當一個同步方法從一個異步代碼塊調用的時候拋出這個異常。

Thread

這個類創建並控制一個線程,設置線程優先級並獲取其狀態。

ThreadAbortException

當調用Abort()方法時拋出這個異常。

ThreadExceptionEventArgs

為ThreadException事件提供數據。

ThreadInterruptedException

當線程處於wating狀態時的異常中斷會導致這個異常。

ThreadPool

這個類提供一個可以用來執行工作,處理異步I/O,等待其他線程以及處理定時器的線程池。

ThreadStateException

當方法調用的時候且線程處於一個不合法的狀態時拋出這個異常。

Timeout

這個類簡單地包含了一個我們想要確定特定時間的常量。

Timer

這個類提供在特定間隔中執行方法的結構。

WaitHandle

這個類將等待對一個共享資源獨享訪問的操作系統對象封裝起來。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

我們不會在這部分所有的類,但是知道這個命名空間為我們提供了哪些類是很重要的。其他類將會在后續章節討論。

線程類

到目前為止,我們將要重點討論線程類,因為這個類表示了我們使用的進程。這個類允許我們做很多事情,從管理一個線程的優先級到讀線程的狀態。

讓我們從查看這個類的公共方法的表格開始。

公共方法名 描述
Abort() 這個重載方法在它被調用的線程中引發一個ThreadAbortException, 並開始終止線程的過程。調用這個方法通常會終止線程。
AllocateDataSlot() 這個靜態方法在所有線程上分配一個未命名的數據槽。
AllocateNamedSlot() 這個靜態方法在所有線程上分配一個命名的數據槽。
FreeNamedDataSlot() 這個靜態方法釋放一個之前分配的命名數據槽。
GetData() 這個靜態方法從當前線程的當前應用程序域特定位置收集數據。
GetDomain() 這個靜態方法返回當前線程所屬的當前應用程序域。
GetDomainID() 這個靜態方法返回一個唯一的應用程序域標志。
GetHashCode() 這個方法作為一個特定類型的哈希函數,適用於哈希算法和數據結構(哈希表)。
GetNamedDataSlot() 這個靜態方法尋找一個命名的數據槽。
Interrupt() 這個方法中斷狀態為WaitSleepJoin的線程。
Join() 這個重載方法阻塞調用線程直到一個線程終止。
ResetAbort() 這個靜態方法為當前線程取消Abort()請求。
Resume() 這個方法恢復阻塞的線程。
SetData() 這個靜態方法為線程的當前程序域設定數據。
Sleep() 這個靜態重載方法按照特定毫秒阻塞當前線程。
SpinWait() 這個靜態方法導致一個線程等待由迭代參數定義的時間。
Start() 這個方法會導致操作系統將當前線程的狀態置成ThreadState.Running.
Suspend() 這個方法會阻塞線程,如果當前線程已經阻塞,會不起作用。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

現在讓我們看看另外一張表,這次包含了線程的公共屬性。

公共屬性名 描述
ApartmentState 或者或者設置當前線程的單元狀態。
CurrentContext 這個靜態屬性獲取正在執行的線程的上下文。
CurrentCulture 獲取或者設置當前線程的文化背景。
CurrentPrincipal 這個靜態屬性獲取或設置線程當前的身份。對基於角色的安全很重要。
CurrentThread 這個靜態屬性獲取當前正在運行的線程。
CurrentUICulture 在運行時使用,這個屬性被資源管理器用來尋找特定文化資源。
IsAlive 獲取當前線程執行狀態值。
IsBackground 獲取或設置當前線程是不是后台線程。
IsThreadPoolThread 獲取當前線程是不是一個線程池的一部分。
Name 獲取或者設置當前線程名。
Priority 獲取或者設置一個線程的執行優先級。
ThreadState 獲取當前線程的狀態。

 

 

 

 

 

 

 

 

 

 

 

 

再次,我們不會在這一章使用所有公共屬性。我們已經看過了這些類成員,但是除了我們使用它們創建一個線程否則對我們來說它們沒什么用。所以下一篇我們將會創建一個簡單的C#線程示例。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM