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

C# 執行緒系列講座 (2):Thread 類別應用進階與 Join 等待機制

     編輯:關於C語言

潛在競態風險與建構函式初始化

原範例中計數器啟動於 run() 方法,若某執行緒排程延遲未執行,主執行緒可能誤判全部完成。解法:將初始化移至建構函式,執行緒建立即執行,移除 lock:


public ThreadCounter(int ms) {
    this.ms = ms;
    Increment(); // 建構時立即執行
}

Thread.Join 等待多執行緒完成


private static void ThreadMethod(object obj) {
    Thread.Sleep((int)obj);
    Console.WriteLine(obj + " ms 任務結束");
}

private static void JoinAll(object obj) {
    foreach (Thread t in (Thread[])obj) t.Join();
    Console.WriteLine("所有執行緒結束");
}

static void Main() {
    Thread t1 = new Thread(ThreadMethod);
    Thread t2 = new Thread(ThreadMethod);
    Thread t3 = new Thread(ThreadMethod);
    t1.Start(3000); t2.Start(5000); t3.Start(7000);
    new Thread(JoinAll).Start(new Thread[] { t1, t2, t3 });
}

兩種寫法均無執行緒數量限制(受 OS/硬體資源約束),Join 方式更通用、不需共享計數器。

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