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

C# 線程資源同步方式總結(二)——lock 關鍵字與 Monitor 進階控制

     編輯:關於C語言

3. lock 關鍵字:最簡單的同步


object o = new object();
lock (o)
{
    Console.WriteLine("O");
}
// 相當於 Monitor.Enter/Exit 配合 try/finally

等同於 Java synchronized,編譯器自動展開為 Monitor.Enter/Exit + try/finally。

4. Monitor 類別:進階同步控制

  • Enter(obj):獲得獨佔權
  • Exit(obj):釋放獨佔權 (可重入,Enter/Exit 次數必須對等)
  • TryEnter(obj):嘗試獲得,失敗立即返回 false,不阻塞
  • TryEnter(obj, timeout):指定超時毫秒

Monitor 代碼示範


private static object m_monitorObject = new object();

static void Do()
{
    if (!Monitor.TryEnter(m_monitorObject))
    {
        Console.WriteLine("Can't visit Object " + Thread.CurrentThread.Name);
        return;
    }
    try
    {
        Monitor.Enter(m_monitorObject);
        Console.WriteLine("Enter Monitor " + Thread.CurrentThread.Name);
        Thread.Sleep(5000);
    }
    finally
    {
        Monitor.Exit(m_monitorObject);
    }
}

lock vs Monitor 選擇指南

  • 單純互斥、程式碼區塊固定 → lock (簡潔、安全)
  • 需非阻塞嘗試、超時控制、跨方法鎖持有 → Monitor
  • lock 實際上是 Monitor 的語法糖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved