天天看點

線程同步(C# 程式設計指南)

在應用程式中使用多個線程的一個好處是每個線程都可以異步執行。對于 Windows 應用程式,耗時的任務可以在背景執行,而使應用程式視窗和控件保持響應。對于伺服器應用程式,多線程處理提供了用不同線程處理每個傳入請求的能力。否則,在完全滿足前一個請求之前,将無法處理每個新請求。

然而,線程的異步特性意味着必須協調對資源(如檔案句柄、網絡連接配接和記憶體)的通路。否則,兩個或更多的線程可能在同一時間通路相同的資源,而每個線程都不知道其他線程的操作。結果将産生不可預知的資料損壞。

有關多線程程式設計的背景資訊,請參見:

<a href="http://msdn.microsoft.com/zh-cn/library/5xt1dysy(v=VS.80).aspx">使用線程處理(C# 程式設計指南)</a>

<a href="http://msdn.microsoft.com/zh-cn/library/hyz69czz(v=VS.80).aspx">托管線程處理基本知識</a>

<a href="http://msdn.microsoft.com/zh-cn/library/e1dx6b2h(v=VS.80).aspx">使用線程和線程處理</a>

<a href="http://msdn.microsoft.com/zh-cn/library/1c9txz50(v=VS.80).aspx">托管線程處理的最佳做法</a>

lock 關鍵字

public void Function()

{

    System.Object lockThis = new System.Object();

    lock(lockThis)

    {

        // Access thread-sensitive resources.

    }

}

提供給 <b>lock</b> 關鍵字的參數必須為基于引用類型的對象,該對象用來定義鎖的範圍。在上例中,鎖的範圍限定為此函數,因為函數外不存在任何對該對象的引用。嚴格地說,提供給 <b>lock</b> 的對象隻是用來唯一地辨別由多個線程共享的資源,是以它可以是任意類執行個體。然而,實際上,此對象通常表示需要進行線程同步的資源。例如,如果一個容器對象将被多個線程使用,則可以将該容器傳遞給 lock,而 lock 後面的同步代碼塊将通路該容器。隻要其他線程在通路該容器前先鎖定該容器,則對該對象的通路将是安全同步的。

螢幕

<a></a>

<b>lock</b> 關鍵字可以用來確定代碼塊完成運作,而不會被其他線程中斷。這是通過在代碼塊運作期間為給定對象擷取互斥鎖來實作的。

<b>lock</b> 語句以關鍵字 <b>lock</b> 開頭,它有一個作為參數的對象,在該參數的後面還有一個一次隻能由一個線程執行的代碼塊。例如:

繼續閱讀