首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 執行緒系列講座 (4):同步與死結完整分析

     編輯:關於C語言

死結形成過程


static object objA = new object(), objB = new object();
static void LockA() {
    lock (objA) { Thread.Sleep(1000); lock (objB) { } }
    Console.WriteLine("LockA");
}
static void LockB() {
    lock (objB) { Thread.Sleep(2000); lock (objA) { } }
    Console.WriteLine("LockB");
}

執行緒 A 鎖 A → Sleep → 等 B;執行緒 B 鎖 B → Sleep → 等 A → 互相等待 → 死結。

解決方案一:固定鎖順序


static void LockB_Fixed() {
    lock (objA) { Thread.Sleep(2000); lock (objB) { } }
    Console.WriteLine("LockB");
}

所有執行緒遵循相同鎖獲取順序 (A → B),打破循環等待條件。

解決方案二:強制中止 (暴力)


Thread a = new Thread(LockA), b = new Thread(LockB);
a.Start(); b.Start();
Thread.Sleep(4000);
a.Abort(); b.Abort(); // 強制終止
Console.WriteLine("執行緒全部結束");

警告:Thread.Abort 極不推薦,會導致資料不一致、鎖未釋放、finally 區塊可能不執行,僅作緊急處理示範。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved