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

C# 多執行緒程式設計核心技術詳解

     編輯:關於C語言

命名空間與基本類別

所有執行緒功能位於 System.Threading 命名空間。核心類別 Thread 代表一條執行緒。

建立與啟動執行緒

using System.Threading;

Thread thread = new Thread(new ThreadStart(HelloWorld));
thread.Start();  // 非同步啟動,立即返回

void HelloWorld() {
    Console.WriteLine("Hello from thread!");
}

注意:Java 的 run() 對應 C# 的建構子傳入 ThreadStart 委派,非繼承覆寫。

執行緒生命週期控制

操作方法/屬性說明
永久終止Abort()拋出 ThreadAbortException,需先檢查 IsAlive
暫停指定時間Sleep(milliseconds)靜態方法,讓出 CPU 時間片
掛起Suspend()已過時,易造成死結,建議用同步機制替代
恢復Resume()已過時,配合 Suspend 使用
優先權Priority 屬性Lowest/BelowNormal/Normal/AboveNormal/Highest

安全終止範例

if (thread.IsAlive) {
    thread.Abort();  // 或 thread.Join() 等待自然結束
}

掛起/恢復(不建議使用)

if (thread.ThreadState == ThreadState.Running)
    thread.Suspend();

if (thread.ThreadState == ThreadState.Suspended)
    thread.Resume();

執行緒狀態判斷

ThreadState 為旗標列舉(可組合):

  • Running、Suspended、WaitSleepJoin、Stopped、Aborted、Unstarted 等
  • 使用 (thread.ThreadState & ThreadState.Running) != 0 檢查特定狀態

前景與背景執行緒

thread.IsBackground = true;  // 背景執行緒:主程式結束時自動終止
// 預設為前景執行緒,會阻止應用程式結束

同步化基礎(進階主題預告)

  • lock / Monitor:互斥鎖
  • Mutex:跨處理序同步
  • Semaphore:資源計數控制
  • AutoResetEvent/ManualResetEvent:訊號通知
  • Interlocked:原子操作

最佳實務建議

  1. 優先使用 ThreadPool / Task / async-await,避免手動管理 Thread
  2. 避免 Abort、Suspend/Resume,改用取消權杖(CancellationToken)
  3. 共享資料必須同步,考慮不可變物件或 Concurrent 集合
  4. 設定有意義的 Name 利於偵錯
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved