在企業級軟件開發過程中,為了改善應用程序的性能需要通常使用對象池來控制對象的實例化。例如,在我們每次需要連接一個數據庫時都需要創建一個數據庫連接,而數據庫連接是非常昂貴的對象。所以,為了節省為每次數據庫調用都實例化一個數據庫連接的資源,我們可以緩存並重用一些創建好的數據庫連接對象並通過節 ...
在這部分我們將看兩個大的例子。首先,我們將看一下創建線程安全的包裝器的例子,然后看一下數據庫連接池例子。 實現自己的線程安全包裝器 實現自己的線程安全包裝器主要基於你可能不想讓類庫中的每個類都是線程安全的,而使用同步也會帶來性能問題的事實。你可能想要為開發人員提供一個是否使用一個同步類的選擇。由於開發人員既不想發生死鎖也不想發生由於在一個單線程環境中使用線程安全類而導致的性能問題,他們可能更傾向於 ...
2012-02-15 22:15 7 2842 推薦指數:
在企業級軟件開發過程中,為了改善應用程序的性能需要通常使用對象池來控制對象的實例化。例如,在我們每次需要連接一個數據庫時都需要創建一個數據庫連接,而數據庫連接是非常昂貴的對象。所以,為了節省為每次數據庫調用都實例化一個數據庫連接的資源,我們可以緩存並重用一些創建好的數據庫連接對象並通過節 ...
第三種同步策略關注手動同步技術,.NET Framework 提供了一個經典的技術套件。他們給了程序員使用類似WIN32線程API的底層線程API來創建和管理多線程應用程序的能力。 下面的表顯示了System.Threading 命名空間中可以用於手動同步的一些類 ...
AutoResetEvent 類 AutoResetEvent類的工作方式與ManualResetEvent類似。它會等超時事件發生或者信號事件發生然后通知正在等待的線程。ManualResetEvent和AutoResetEvent之間最重要差別之一是AutoResetEvent ...
公共語言架構提供了三種策略來同步訪問實例和靜態方法以及實例屬性,這三種策略是: 1. 同步上下文 2. 同步代碼區域 3. 手動同步 同步上下文 上下文是一系列對象集合在執行時常見的屬性或者使用規范。可以被添加的上下文屬性包括同步,線程關聯以及事務。簡而言之,一個上下文 ...
.NET Framework 提供了很多System.Threading,System.EnterpriseService 和 System.Runtime.Compiler 命名空間中的很多類來幫助程序員開發線程安全代碼。下表簡要地描述了.NET Framework 中的一些同步類 ...
Monitor 類的TryEnter() 方法在嘗試獲取一個對象上的顯式鎖方面和 Enter() 方法類似。然而,它不像Enter()方法那樣會阻塞執行。如果線程成功進入關鍵區域那么TryEnter()方法會返回true. TryEnter()方法的三個重載方法中的兩個以一個timeout類型值 ...
一個ReaderWriterLock 類定義一個實現單寫多讀語義的鎖。這個類通常用在能被多個線程讀取但是僅能被一個線程寫入的文件操作時使用。下面是ReaderWriterLock類中的四個主要方法: a. AcquireReaderLock(): 這個重載方法獲取一個讀者鎖,接受一個整型 ...
盡管使用線程同步對線程安全來說是必須的,但是如果沒有用好的話就可能導致死鎖。因此,理解什么是死鎖並知道如何避免死鎖是非常重要的。當兩個或兩個以上的線程等待兩個或多於兩個鎖被釋放然后程序中的邏輯導致鎖永遠都不會被釋放時死鎖就發生了。圖3描述了一個典型的死鎖場景。 圖3 在上圖中,線程 ...