程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c#如何避免線程死鎖

c#如何避免線程死鎖

編輯:關於C語言

大多數的死鎖都是因為代碼允許以不一致的方式鎖定資源。例如我們要將一個賬戶的資金轉到另一個賬戶中。Monitor類提供同步對對象的訪問的機制。類通過向單個線程授予對象鎖來控制對對象的訪問。對象鎖提供限制訪問代碼塊(通常稱為臨界區)的能力。當一個線程擁有對象的鎖時,其他任何線程都不能獲取該鎖。還可以使用Monitor來確保不會允許其他任何線程訪問正在由鎖的所有者執行的應用程序代碼節,除非另一個線程正在使用其他的鎖定對象執行該代碼。示例代碼如下:

public void Transer(Account accFrom, Account accTo, decimal num)
{
Monitor.Enter(accFrom);//鎖定賬戶一
Monitor.Enter(accTo);//鎖定賬戶二
//業務代碼。。。
Monitor.Exit(accFrom);//釋放賬戶一
Monitor.Exit(accTo);//釋放賬戶二
}

而這個時候有兩個線程,線程一和線程二試圖以不同的順序獲得相同的資源,每個線程都在鎖定兩個資源前先行鎖定了一個,此時就會出現死鎖現象。

解決方法就是鎖定執刑的代碼。例如:

lock(this)
    {
      //Monitor語句
    }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved