object o = new object();
lock (o)
{
Console.WriteLine("O");
}
// 相當於 Monitor.Enter/Exit 配合 try/finally
等同於 Java synchronized,編譯器自動展開為 Monitor.Enter/Exit + try/finally。
Enter(obj):獲得獨佔權Exit(obj):釋放獨佔權 (可重入,Enter/Exit 次數必須對等)TryEnter(obj):嘗試獲得,失敗立即返回 false,不阻塞TryEnter(obj, timeout):指定超時毫秒
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 (簡潔、安全)Monitorlock 實際上是 Monitor 的語法糖