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

淺談 .NET 多線程與並行計算(四):線程同步基礎(下)

     編輯:關於ASP.NET

同步基元分類:鎖定、通知、聯鎖

  • 鎖定:lock(獨佔)、Semaphore(計數信號,允許 N 線程進入)
  • 通知:AutoResetEvent(自動重置)、ManualResetEvent(手動重置)
  • 聯鎖:Interlocked 原子操作

同步機制無法保證線程按預期順序執行(OS 排程不可預測),濫用大範圍鎖會將多線程退化為單線程,效能反而下降。

Monitor.TryEnter:帶超時的鎖獲取

static int result = 0;
static object locker = new object();

for (int i = 0; i < 10; i++)
{
    new Thread(() =>
    {
        if (Monitor.TryEnter(locker, 2000)) // 2 秒超時
        {
            Thread.Sleep(1000);
            Console.WriteLine(DateTime.Now.ToString("mm:ss"));
            Monitor.Exit(locker);
        }
    }).Start();
}

僅輸出3次:前3線程各佔1秒,後續線程超時退出

前 3 線程依序獲取鎖(各耗 1 秒),第 4 線程等待 2 秒超時返回 false 結束,後續同理。Monitor.TryEnter 避免無限期阻塞,適合需超時控制場景。

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